public class SwapValue {
static int a=1;
static int b=2;
public static void main(String[] args){

swapOne();
swapTwo();}
public static void swapOne(){
a^=b;
b^=a;
a^=b;
System.out.println(a+"\n"+b);
}
public static void swapTwo(){
int c=a;
a=b;
b=c;
System.out.println(a+"\n"+b);
}
}
swap的两种方法哪种效率高,哪种比较好。。求解释

解决方案 »

  1.   

    第二个快, 第二个只要传值, 第一个要计算。。public class Test {
    static int a = 1;
    static int b = 2; public static void main(String[] args) {
    Date a =new Date();
    for(int i = 0 ; i < 10000000 ; i++){
    swapOne();
    }
    Date b =new Date();
    for(int i = 0 ; i < 10000000 ; i++){
    swapTwo();
    }
    Date c =new Date();
    System.out.println(b.getTime() - a.getTime());
    System.out.println(c.getTime() - b.getTime());
    } public static void swapOne() {
    a ^= b;
    b ^= a;
    a ^= b;
    } public static void swapTwo() {
    int c = a;
    a = b;
    b = c;
    }
    }
      

  2.   

    有道理,我仔细看了高德纳爷爷(人家都75了,还叫人伯伯?)的原话
    我们该放过小的效率问题,97%的时候该这样说:过早优化是罪恶之源。然而我们也不该放过那重要的3%。
    可见江湖上流传的版本只是其中一部分,也太过绝对
    这里我又做了一些实验,发现随便用java的一些按位运算符,移位运算符来代替赋值,加减乘除运算效率一般是没有提升的,甚至是下降,所以不懂的话还是不要随便写了。对java的内部机制产生了兴趣,看来要多看看jvm啊