当前位置: 代码迷 >> J2SE >> 数据交换步骤
  详细解决方案

数据交换步骤

热度:140   发布时间:2016-04-23 20:16:19.0
数据交换方法
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,是行不通的。