A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hugoo 中级黑马   /  2014-7-5 12:12  /  755 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
  int a = 10;
  int b = 12;
  a = b + (b = a) * 0; // 这句实现交换
  System.out.println("a:" + a + "  b:" + b);
}





对于这段代码片段:

int a = 1;  

int b = 2;   

a = b + (b = a) * 0;  

如果将其转换为静态单赋值形式,并限制每个语句都是一个二元运算与一个赋值,就变成:
int a0 = 1;
int b0 = 2;
int b1 = a; // (b = a)
int temp1 = b1 * 0; // (b = a) * 0
int a1 = b0 + temp1; // b + (b = a) * 0

这样就比较明显了:a0、b0是交换前的值,a1、b1是交换后的值。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

2 个回复

倒序浏览
学习了,我见过一个这样的
int a=3,b=5;//交换a,b的值
a=a^b;
b=a^b;
a=a^b;

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
这种依赖表达式副作用的方法,用起来总觉得不踏实,而且只在变量类型允许"+"、"*"操作的情况下适用。我还是老老实实三变量法吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马