System.out.println(true ? null : 0);
System.out.println(true ? (Integer)null : 0);
System.out.println(true ? (Integer)null : new Integer(0));
- 补充一点三元运算符知识(尽量保持两边类型一致可减少一些潜在的问题)
当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:
1.若果两个操作数不可转换,则不做转换,返回值为Object类型。
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。
3.假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。
4.若两个操作数字都是直接数字。则返回值类型为范围较大者。假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型
- 当第二个和第三个表达式中有一个是基本数据类型的封装类(比如Integer),而另一个是基本数据类型,刚好第一个选择条件是选择封装类这个表达式的话,那么就会进行强制拆包成其对应的基本数据类型(比如int)
三元运算符的幽默
三元运算符的类型务必一致
三元运算符因为前后类型不一致产生空指向
三元运算符的返回类型
- 三元运算符和if-else区别
三元运算符属于运算符,所以它的运算会有一个结果,就会返回一个值 。而if-else不一定有返回值。