System.out.println(true ? null : 0);

原文


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的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型

  1. 当第二个和第三个表达式中有一个是基本数据类型的封装类(比如Integer),而另一个是基本数据类型,刚好第一个选择条件是选择封装类这个表达式的话,那么就会进行强制拆包成其对应的基本数据类型(比如int)

三元运算符的幽默
三元运算符的类型务必一致
三元运算符因为前后类型不一致产生空指向
三元运算符的返回类型

  • 三元运算符和if-else区别

三元运算符属于运算符,所以它的运算会有一个结果,就会返回一个值 。而if-else不一定有返回值。



以上说的都是在java中,其它语言中有小部分是不相同的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容