一个关于Java数组中两个元素交换的问题

麦克斯韦的妖精 2017-05-30 03:54:02
今天写代码的时候发现了一个现象。如下代码所示,用第一种交换方法实际上数组没有变化,而第二种方法却可以,想请大神解释一下第一种方法为什么会失败。

public class swaptest {

public static void main(String[] args) {
// TODO Auto-generated method stub

int[] nums = new int[5];
for(int i = 0;i<5;i++)
nums[i] = i;

System.out.println("第一种方法");
swap(nums[3],nums[4]);
for(int i = 0;i<5;i++)
System.out.print(nums[i]);

System.out.println("\n第二种方法");
swap(nums,1,2);
for(int i = 0;i<5;i++)
System.out.print(nums[i]);
}

public static void swap(int x,int y){
int z = x;
x = y;
y = z;
}

public static void swap(int[] array,int x,int y){
int xx = array[x];
int yy = array[y];
array[x] = yy;
array[y] = xx;
}

}

...全文
1639 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Do It ! 2020-02-18
  • 打赏
  • 举报
回复
 方法的参数是基本数据类型, 形参的不直接影响实参的值
  • 打赏
  • 举报
回复
这好像与是不是int类型没有关系
  • 打赏
  • 举报
回复
嗯,也就是第一种方法是新建了两个int类型的对象,交换的操作是在新的对象上进行的,所以不改变原来数组中的值。而第二种是因为传入的参数实际上是地址,改变了地址中的值所以数组也就变了。
MikeDDT009 2017-05-30
  • 打赏
  • 举报
回复
因为是基本类型的,x(变量名)= 具体值。并没有改变数组里面的内容。 举个例子大概是这样,对基本类型: int num1 = 10; int num2 = num1;-------因为基本类型这里表示的是把num1的值复制一份给num2,所以下面对num2进行任何操作并不会影响到num1 比如: num2 = num2 * 2; 按照我的理解那就是引用的问题,如果你没学到对象和类的话可能理解比较麻烦。 你第二个成功是因为你传的是指向同一个对象(数组理解成一个新的数据类型,也就是引用类型,也可以说是类),于是你修改是针对的同一个对象进行的

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧