这个问题是值传递的问题
你在主函数调用swap(num1,num2);
实际上你是把num1和num2的值赋值给了函数swap(int a,int b)的a和b
所以你看你最后的结果
调用前num1=1,num2=1024
内部运行结果:a(num1)=1024,b(num2)=1
调用后num1=1,num2=1024
证明a和b的值是对换了,但是变量num1和num2的值依然没变
实际上就是内存中有4个变量(num1,num2,a,b)你怎么改变a,b的值都不会影响到num1,num2
如果是传地址就不会有问题了
代码如下:
class Swap {
public static void main(String[] args)
{
int[] num=new int[] {1,1024};
System.out.println("调用前"+"num1="+num[0]+",num2="+num[1]);
swap(num);
System.out.println("调用后"+"num1="+num[0]+",num2="+num[1]);
}
//定义一个方法互换两个变量的值
public static void swap(int[]arr){
int temp=arr[0];
arr[0]=arr[1];
arr[1]=temp;
System.out.println("内部运行结果:num1="+arr[0]+",num2="+arr[1]);
}
}
补充一点:
2个数交换其实可以用位运算,而且不用第三个变量
class Swap {
public static void main(String[] args)
{
int[] num=new int[] {1,1024};
System.out.println("调用前"+"num1="+num[0]+",num2="+num[1]);
swap(num);
System.out.println("调用后"+"num1="+num[0]+",num2="+num[1]);
}
//定义一个方法互换两个变量的值
public static void swap(int[]arr){
arr[0]=arr[0]^arr[1];
arr[1]=arr[0]^arr[1];
arr[0]=arr[0]^arr[1];
System.out.println("内部运行结果:num1="+arr[0]+",num2="+arr[1]);
}
}
结果一样 |