您的位置:首页 > 其它

不使用第三个变量完成两个整数的交换

2011-04-08 23:31 525 查看
public class Person {



public static void main(String[] args) {

//利用加减法

int a = 10, b = 5;

a = a + b;

b = a - b;

a = a - b;

System.out.println("a=" + a + "/nb=" + b);

}

}



还有另外一种方法,且效率更快:



public class Person {
public static void main(String[] args) {
//利用一个数异或本身等于0和异或运算符合交换率
int a = 10, b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a=" + a + "/nb=" + b);
}
}


当然以上两种的算法对应js中也支持,如下:



Js代码

var a = 11,b = 22;
a = a + b;
b = a - b;
a = a - b;

console.log(a+'/n'+b)


Js代码

var a = 11,b = 22;
a = a ^ b;
b = a ^ b;
a = a ^ b;

console.log(a+'/n'+b)
但如果两个变量是对象类型,java(强类型)貌似无能为力了。js却可以,实现方式还不少,如下:



Js代码

var a = {name:'jack'},b = {name:'tom'};

a = [a,b];

b = a[0];

a = a[1];



console.log(a.name+'/n'+b.name)

var a = {name:'jack'},b = {name:'tom'};
a = [a,b];
b = a[0];
a = a[1];

console.log(a.name+'/n'+b.name)



或者



Js代码

var a = {name:'jack'},b = {name:'tom'};

a = {a:a,b:b};

b = a.a;

a = a.b;



console.log(a.name+'/n'+b.name)

var a = {name:'jack'},b = {name:'tom'};
a = {a:a,b:b};
b = a.a;
a = a.b;

console.log(a.name+'/n'+b.name)



正是利用js动态类型(弱类型)系统及对象/数组直接量特性。其它强类型则不可以,编译器会提示类型转换错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: