由于没有搞清楚运算符的优先级,今天犯了个错误,记下来以免下次再犯同样的错误!
错误代码如下:
本意是想用后面两条打印语句来判断prev与next对像是否为空,设想它输出的结果应该如下:
prev==null :true(false)
next==null :true(false)
但结果确不论prev、next是否为null,打印的结果都只有两个false,感觉莫名其妙,呵呵·最后终于找到问题的所在,原来在两条输出语句中由于"+"优先级高于"==",所以会先执行定符串相加的操作,再进行判断。所以输出才会一直为"false"。
附,运算附优先级表:
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左
错误代码如下:
Node prev=node.previou;
Node next=node.next;
System.out.println("prev==null :"+prev==null);
System.out.println("next==null :"+next==null);
本意是想用后面两条打印语句来判断prev与next对像是否为空,设想它输出的结果应该如下:
prev==null :true(false)
next==null :true(false)
但结果确不论prev、next是否为null,打印的结果都只有两个false,感觉莫名其妙,呵呵·最后终于找到问题的所在,原来在两条输出语句中由于"+"优先级高于"==",所以会先执行定符串相加的操作,再进行判断。所以输出才会一直为"false"。
附,运算附优先级表:
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左