Object o1 = true ? new Integer(1) : new Double(2.0);
等同于:
Object o2;
if (true)
o2 = new Integer(1);
else
o2 = new Double(2.0);
让你失望了。来做个简单的测试吧:
System.out.println(o1);
System.out.println(o2);
打印结果是:
1.0
1
哦!如果『需要』,条件运算符会做数值类型的类型提升,这个『需要』有非常非常非常强的引号。因为,你觉得下面的程序会抛出NullPointerException吗?
Integer i = new Integer(1);
if (i.equals(1))
i = null;
Double d = new Double(2.0);
Object o = true ? i : d; // NullPointerException!
System.out.println(o);
关于这一条的更多的信息可以在这里找到。
5. 你没有掌握复合赋值运算符
是不是觉得不服?来看看下面的2行代码:
i += j;
i = i + j;
直觉上认为,2行代码是等价的,对吧?但结果即不是!JLS(Java语言规范)指出: