public class Dome {
public static void main(String[] args){
int a = 35;
int b = 60;
swap(a,b);
}
public static void swap(int x,int y){
x=x^y;
y=x^y;
x=x^y;
}
}
我是个新人,问为什么最后的结果不能进行交换?但我用数组好像就能,如果硬要这样做的话,有什么其他的办法?
------解决思路----------------------
您好 这个是传参问题:
java方法中参数传递方式是按值传递 也就是传递参数的一分拷贝
对于普通类型参数 在方法内是不能改变传入值的
但是对于对象的引用指向堆内实际内存 我们传递数组实际上是传递一个数组引用int[] a
这个是会改变其指向的实际内容的. 比方说你在方法内进行a[0] = 1; 这样会有变化
希望对你有帮助
------解决思路----------------------
楼主先运行下面的代码,看看输出结果:
package learning;
class NumWrap{
int a = 35;
int b = 60;
}
public class Dome {
static int a = 35;
static int b = 60;
public static void main(String[] args) {
System.out.println("Before swapPrim a = " + a + ", b = " + b);
swapPrim(a, b);
System.out.println("After swapPrim a = " + a + ", b = " + b);
System.out.println("Before swapRef a = " + a + ", b = " + b);
swapRef(new NumWrap());
System.out.println("Before swapRef a = " + a + ", b = " + b);
}
public static void swapPrim(int x, int y) {
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
public static void swapRef(NumWrap x) {
x.a = x.a ^ x.b;
x.b = x.a ^ x.b;
x.a = x.a ^ x.b;
a = x.a;
b = x.b;
}
}
在java里面的参数都是按值传递的,也就是只传递参数的值,这样的话不会影响实际变量。要想实现swap功能,可以在方法中直接操作变量,或者将形参表示为对象
------解决思路----------------------
把a和b作为成员对象
public class Dome {
public int a;
public int b;
public static void main(String[] args){
int a = 35;
int b = 60;
swap(a,b);
System.out.println("a=" + this.a + " b=" + this.b);
}
public void swap(int a, int b) {
this.a = b;
this.b = a;
};
}
三楼说的将参数改为Integer,是行不通的。