jdk10与jdk9的区别_JDK 8与JDK 10:三元/拆箱的区别

jdk10与jdk9的区别

最近的Nicolai Parlog ( @nipafx ) 鸣叫引起了我的注意,因为它引用了一个有趣的StackOverflow讨论 ,该讨论涉及JDK 8和JDK 10之间的行为更改,并询问“为什么?” SerCe 在StackOverflow线程上引用的问题最终归结为在JDK 8和JDK 10之间更改了实现,以正确实现 Java语言规范。

下面的代码清单(略有改编)改编自SerCe在StackOverflow线程上提供的原始示例。

在JDK 10和JDK 8中表现不同的改编示例

public static void demoSerCeExample()
{try{final Double doubleValue = false ? 1.0 : new HashMap<String, Double>().get("1");out.println("Double Value: " + doubleValue);}catch (Exception exception){out.println("ERROR in 'demoSerCeExample': " + exception);}
}

使用JDK 8编译并执行上述代码后,它将生成如下输出:
Double Value: null
使用JDK 10编译并执行上述代码后,它将生成如下输出: ERROR in 'demoSerCeExample': java.lang.NullPointerException 在JDK 8中,三元运算符返回null以分配给局部变量doubleValue ,但在JDK 10中,为同一三元语句抛出NullPointerException

此示例的两个调整导致一些有趣的观察。 首先,如果将三元运算符中表示的文字常量1.0指定为Double.valueOf(1.0) ,则JDK 8和JDK 10都将局部变量设置为null而不是抛出NullPointerException 。 其次,如果使用基本类型double而不是引用类型Double声明了局部变量,则无论Java版本和是否使用Double.valueOf(double)都始终抛出NullPointerException 。 当然,第二个观察是有道理的,因为无论三元运算符如何处理对象或引用,都必须在某个点将其取消引用以分配给原始double类型,并且在示例中始终会导致NullPointerException

下表总结了这些观察结果:

完整的三元声明 设置局部变量doubleValue
JDK 8 JDK 10
Double doubleValue
= false
? 1.0
: new HashMap<String, Double>().get("1");
null NullPointerException
double doubleValue=  false? 1.0: new HashMap<String, Double>().get("1");
NullPointerException NullPointerException
Double doubleValue=  false? Double.valueOf(1.0): new HashMap<String, Double>().get("1");
null null
double doubleValue=  false? Double.valueOf(1.0): new HashMap<String, Double>().get("1");
NullPointerException NullPointerException

对于这个一般的三进制示例,在两个Java版本中都避免NullPointerException的唯一方法是将局部变量声明为引用类型Double (无需取消装箱)并使用Double.valueOf(double)以便在整个引用过程中使用Double三元而非原始的double 。 如果仅通过指定1.0隐式表示原始double ,则Java Map返回的Double在JDK 10中将被隐式取消装箱(取消引用),从而导致异常。 根据Brian Goetz的说法 ,JDK 10使实现返回到符合规范的状态。

翻译自: https://www.javacodegeeks.com/2018/06/jdk-ternary-difference.html

jdk10与jdk9的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的多态形式中,如何访问成员变量和调用成员方法

文章目录简介演示案例简介 多态&#xff0c;多态使 Java 更有生命和鲜活起来。多态指子类对象可以直接赋值给父类变量&#xff0c;但在运行时依然表现出子类的特征。Java 引用变量有两种类型&#xff0c;分别是编译时类型和运行时类型&#xff0c;编译时类型由声明类型决定&am…

cobol和java_Java正成为COBOL的一部分-它将成为COBOL的一部分吗?

cobol和java任何从大学&#xff0c;技术学校或社区学院毕业的计算机科学专业都接受过培训。 每个身材高大的公司都使用该语言&#xff0c;并拥有一批具备此能力的程序员。 通用语言可以推动业务发展。 1985年是COBOL。今天是Java。 尽管存在差异&#xff0c;但是这两种语言在轨…

android 6.0 dm-verity技术,Android 7.0安全性大幅提升,要求严格强制执行验证启动

在我们针对 Android 7.0 对 dm-verity 所做的更改中&#xff0c;我们使用了一个称为交错的技术&#xff0c;利用该技术&#xff0c;我们不仅可以从丢失的整个 4 KiB 源块恢复数据&#xff0c;还可从多个连续块恢复数据&#xff0c;与此同时&#xff0c;与朴素实现相比&#xff…

Java的final关键字

1.abstract 和 final 不能同时存在&#xff0c;因为自相矛盾&#xff0c;abstract 表示抽象&#xff0c;所以 abstract 修饰的类必须被实现才有意义&#xff0c;而 abstract 修饰的方法必须被覆盖重写&#xff08;即实现&#xff09;才有意义&#xff1b;但是 final 却表示最终…

zuul过滤器_Zuul 2 –样本过滤器

zuul过滤器Zuul 2终于开源了 。 我第一次听到Zuul 2年Spring由米奇科恩一个2016的讲就是可以在这里找到 &#xff0c;这是好事&#xff0c;终于可以用它玩。 为了快速实现Zuul 2之类的网关的目的–网关提供了微服务生态系统的切入点。 由于所有客户请求都是通过网关路由的&…

Java泛型的学习

文章目录前言泛型接口定义实现类时指定泛型具体的数据类型定义实现类时&#xff0c;泛型与接口相同泛型接口的示例代码泛型类演示代码泛型方法演示代码泛型的通配符泛型的区间限定泛型应用泛型性能注意事项前言 泛型的本质就是将数据类型参数化, 普通方法的参数值可以变&#…

html2canvas截取图片不完整,html2canvas关于图片不能一般截取

题目起首说说遇到了什么题目。起首有这么一个需求。须要前端依据后端传过来数据&#xff0c;动态的天生图片。图片中的案牍、背景图片、用户头像全部都是经由过程后端的接口猎取。然则运用 html2canvas 天生的canvas有些图片胜利的在canvas里天生了。然则有些图片无论如何都显现…

shebang_Shebang来Java了吗?

shebang尽管添加对Unix风格的shebang &#xff08; #! &#xff09;的支持从来不是 JEP 330 [“启动单文件源代码程序”]的主要目标&#xff0c;但围绕JEP 330“单个文件源程序”的潜在功能存在一些问题。为了支持Unix风格的shebang &#xff0c;在OpenJDK jdk-dev邮件列表上引…

beetl模板引擎之自定义html标签,Beetl模板引擎自定义分页标签

1)在beetl.properties文件中配置tagTAG.page xx.xx.xx.xx.PageTag2)在模板中引用标签3)增加标签类继承自GeneralVarTagBinding类import org.beetl.core.Context;import org.beetl.core.GeneralVarTagBinding;import org.beetl.core.statement.Statement;import java.io.IOExce…

Java中常用集合类对比_集合比较

集合实现类集合接口有序性唯一性线程安全空值性能排序数据结构索引应用场景备注ArrayListList有序可重复不安全允许空值查找效率高&#xff0c;添加/删除效率低使用 Collections.sort() 传入ArrayList&#xff0c;会采用默认的方式进行排序&#xff08;字典序&#xff09;。自己…

java nio教程_Java NIO教程

java nio教程1.简介 Java NIO是Java 1.4引入的一个库。 自从Java NIO推出以来&#xff0c;它提供了另一种方法来处理I / O和网络事务。 它被认为是Java网络和Java IO库的替代方法。 开发Java NIO的目的是使输入和输出的事务异步和非阻塞。 阻塞和非阻塞IO的概念将在后面的部分…

qq html制作,jquery学习练习:制作QQ简易聊天框

使用html( )获取和设置页面内容使用val( )获取聊天内容使用addClass( )为指定元素追加样式使用数组保存聊天人员头像和昵称使用随机函数获取聊天人员的头像和昵称在输入框中输入内容&#xff0c;单击“发送”按钮&#xff0c;显示聊天内容&#xff0c;使用addClass( )为聊天内容…

IntelliJ IDEA 删除了快捷键后,如何找回来?

文章目录修改冲突快捷键删除了快捷键&#xff0c;如何找回修改冲突快捷键 删除了快捷键&#xff0c;如何找回 如上图所示&#xff0c;如果你删除了【Restore Default Layout】的快捷键后&#xff0c;如何找回来进行重新设置呢&#xff1f; 你可以按组合键【Command ,】&…

移动端设置html的字体尺寸,移动端开发元素及字体尺寸适配基础知识

刚看了一篇真正教会你开发移动端页面的文章(二)&#xff0c;文章写的很清楚&#xff0c;现总结下他的核心思想及自己所查阅的一些资料&#xff1a;假设设计稿是iPhone6(iPhone6设备像素为750px&#xff1b;设备像素比为2&#xff0c;即其适口尺寸为375px)上有200px的方块box&am…

气味识别应用_解决气味

气味识别应用有时&#xff0c;我们在代码库中可能会遇到一些巨大的if语句。 这些语句必须维护并一次又一次地更改相同的代码块。 在if语句检查变量是否属于某个值范围内的情况下&#xff0c;这也是常见的。 假设您有一个枚举 public enum FoodType {FRUIT,VEGETABLES,RED_MEA…

IntelliJ IDEA for Mac 文件结构侧边窗口/类文件内部结构(File Structure)

文章目录显示或者隐藏类中的属性信息显示或者隐藏类中的非公开信息显示或者隐藏类中的字段信息显示或者隐藏继承自父类的内容显示或者隐藏匿名内部类单击导航的开关始终选择打开的元素通过定义类型进行方法分组类内部结构的节点排序类内部结构窗口可以按组合键【Command 7】打…

java.awt.api_Java SE 11(18.9)中的API更新

java.awt.apiJava SE 11也被命名为18.9&#xff08;基于使用发布年份和月份的新命名方案&#xff09;&#xff0c;预计将在9月的最后一周发布GA。 频繁发布新JDK版本的新方法是允许语言创建者引入新功能&#xff0c;并向开发人员社区更快地更新API。 通常&#xff0c;API更新不…

卡西欧82es计算机怎么玩游戏,卡西欧计算器fx82es-如何使用卡西欧fx-82es计算器计算矩阵 – 手机爱问...

2009-12-24有关于卡西欧计算器的问题卡西欧计算机中&#xff0c;坐标变换计算方法:如将极坐标中距离为2&#xff0c;角度为60度的点&#xff0c;转换为直角坐标&#xff0c;可参考方式&#xff1a;选定角度单位&#xff0c;如选定“DEG”即使用“度、分、秒”&#xff1b;输入距…

Java中,为什么子类的构造方法中必须调父类的构造方法?

1.有父才会有子&#xff0c;即便父类什么东西都没有&#xff0c;也必须调父类的构造方法&#xff0c;这样符合现实的生命传承关系&#xff0c;符合 Java 的面向对象和继承的思想 2.如果父类有一些变量&#xff0c;那么调用父类的构造方法&#xff0c;就可以通知 JVM 把父类加载…

java批处理 异常处理_Java批处理教程

java批处理 异常处理在当今世界&#xff0c;互联网已经改变了我们的生活方式&#xff0c;其主要原因之一是大部分日常琐事都使用互联网。 这导致大量数据可用于处理。 其中涉及大量数据的一些示例是处理工资单&#xff0c;银行对帐单&#xff0c;利息计算等。因此&#xff0c;…