网站主题风格,网站开发文档撰写,通讯数码网站,手机主题如何自己制作网站您认为以下代码段会显示什么#xff1f; Object o true ? new Integer(1) : new Double(2.0);
System.out.println(o);是! 它将打印#xff1a; 1.0什么#xff1f; 1.0#xff1f; 但是我已经为我的o变量分配了一个Integer 。 为什么打印1.0#xff1f; 事实证明 Object o true ? new Integer(1) : new Double(2.0);
System.out.println(o); 是! 它将打印 1.0 什么 1.0 但是我已经为我的o变量分配了一个Integer 。 为什么打印1.0 事实证明JLS的§15.25中有一个微妙的小规范部分它指定了三元运算符。 以下是适用于以上内容的内容 条件表达式的类型确定如下 […] 否则如果第二个和第三个操作数具有可转换为数字类型第5.1.8节 的类型则有以下几种情况 […] 二进制数值提升可能会隐式执行拆箱转换 ek 谁会想到这个 您可以从自动拆箱中获取NullPointerException如果其中一个操作数为null 则以下操作将失败 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); 显然显然!!可以通过将数字类型转换为非数字类型来规避此问题例如Object Object o1 true ? (Object) new Integer(1) : new Double(2.0);
System.out.println(o1); 上面将打印 1 保罗·米纳Paul Miner是发现这一难题的功劳他在reddit上对此进行了更详细的解释。 参考 Java自动拆箱陷阱。 谨防 从我们的JCG合作伙伴 Lukas Eder在JAVASQL和JOOQ博客中获得。 翻译自: https://www.javacodegeeks.com/2013/10/java-auto-unboxing-gotcha-beware.html