2 java lds java_lds 于 2014.07.28 22:57 提问

两个数交换,但不加入第三个数,对于这样的做法具体栈中是怎么一个顺序?

两个数交换,但不加入第三个数,对于

int num1 =1;

int num2 =2;

System.out.println("交换前---num1="+num1+" num2="+num2);

num2 = num1 +(num1 = num2)*0;
System.out.println("交换后---num1="+num1+" num2="+num2);

是怎么交换的??
num2 = num1 +(num1 = num2)*0;
对于这句语句,执行之后个人觉得是num1和num2都是2,可是执行结果却不是,这点没搞懂!谢谢

1个回答

pardream
pardream   2014.07.29 17:02

你到网上找java运算符优先级,看一下执行先后就能明白。

num2 = num1 +(num1 = num2)*0;

1.执行()中,num1=num2, num1 = num2; (此时不影响+左边的num1值)
2.执行(num1 = num2)*0 = 0
3.执行num1 + 0
4.执行num2= num1;
完成交换。

pardream
pardream 这与java编译算法有关,并且,这种做变量交换的做法不是通用的算法。至少C语言就不同。
3 年多之前 回复
code_life_
code_life_ 执行(num1 = num2)后num1的引用不就指向2了吗?后面再次用到num1时怎么会还是1?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!