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的两种方法哪种效率高,哪种比较好。。求解释
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;
}
}
我们该放过小的效率问题,97%的时候该这样说:过早优化是罪恶之源。然而我们也不该放过那重要的3%。
可见江湖上流传的版本只是其中一部分,也太过绝对
这里我又做了一些实验,发现随便用java的一些按位运算符,移位运算符来代替赋值,加减乘除运算效率一般是没有提升的,甚至是下降,所以不懂的话还是不要随便写了。对java的内部机制产生了兴趣,看来要多看看jvm啊