一、 一个判断的执行结果分析
有个 判断 t != (t = tail)假如 t=node1;tail=node2;并且node1!=node2那么这个判断是true还是false那,答案是true,这个判断是看当前t是不是和tail相等,相等则返回true否者为false,但是无论结果是啥执行后t的值都是tail。
下面从字节码来分析下为啥?
一个例子
public static void main(String[] args) { int t = 2; int tail = 3;
System.out.println(t != (t = tail));
}
结果为:true;
字节码文件:
字节码命令介绍可参考: http://blog.csdn.net/web_code/article/details/12164733
一开始栈为空
第0行指令作用是把值2入栈栈顶元素为2
第1行指令作用是将栈顶int类型值保存到局部变量t中。
第2行指令作用是把值3入栈栈顶元素为3
第3行指令作用是将栈顶int类型值保存到局部变量tail中。
第4调用打印命令
第7行指令作用是把变量t中的值入栈
第8行指令作用是把变量tail中的值入栈
现在栈里面元素为3,2并且3位栈顶
第9行指令作用是当前栈顶元素入栈,所以现在栈内容3,3,2
第10行指令作用是把栈顶元素存放到t,现在栈内容3,2
第11行指令作用是判断栈顶两个元素值,相等则跳转 18。由于现在栈顶严肃为3,2不相等所以返回true.
第14行指令作用是把1入栈。
总结:然后回头分析下!=是双目运算符,应该是首先把左边的操作数入栈,然后在去计算了右侧操作数。