一鼓作气写点java的东西吧。(“第二次写博客”)
在此郑重说明:一切都是个人理解,或正确或错误,为了不误导你们,请抱着怀疑的态度看!!!谢谢。
1.对单目运算符的测试(以++ 为例)
有如下代码,请问会输出什么?
*public class MyTest {
public static void main(String[] args){
int a = 4;
System.out.println(++a == (a+1));
System.out.println(a++ == (a+1));
}
}*
可能有的人会说:true false。因为单目运算符(++ 为例)先出现先运算,后出现后运算,即使用小括号把 a++ 包括起来,a 也会在参与运算后再执行 ++ 操作。第一个在变量前所先运算所以++a运算后a = 5,和右边相等所以第一个输出true,第二个输出false。我测试过两个都输出false。还有更有趣的现象:
*public class MyTest {
public static void main(String[] args){
int a = 4;
System.out.println((++a) == 5);
System.out.println(a);
System.out.println((a++) == 6);
System.out.println(a);
}
}*
你们猜又会输出什么呢?下面是测试结果:
*true
5
false
6*
其实在写博客之前我是一点头绪都没有,但刚刚打完第二个测试类时,突然脑光一闪,有了自己的猜测:
关于 ++a == (a+1)输出“false”,我的理解是:先运算恒等号左边 ++ 在变量前所以 a 进行自加运算此时 a = 5;运算等式右边时 a+1 = 6,所以 5 == 6 ,false。
关于 a++ == (a+1)输出 false ,我的理解是: 先运算恒等号左边 ++在变量后 所以 a 先参与运算 此时 a = 5(接上面 ++a);运算恒等号右边 a+1= 6,所以 5 == 6,false
第二个测试刚好对上面猜测进行了验证。
这也就是运气吧。自己原来只有第一个测试的代码,慢慢的越写越多也就有了后面这些东西,也解了自己的疑惑。细细想来造成自己困惑的其实是自己已开始认为左右两边的代码是没有关联的,是各运算各的,所以在 a 的值发生改变后没有把 a 的值及时替换掉,因此造成了之前的困惑。望阅读到此文的人没有此困惑。