使用java 9创建包装类的对象

时间:2017-11-22 12:33:46

标签: java wrapper java-9

Java 9的一个新功能是弃用包装器对象的构造函数。创建新Wrapper对象的唯一方法是使用他们的valueOf()静态方法。 例如,对于Integer对象,Integer.valueOf为-128和127之间的值实现缓存,并在每次调用时返回相同的引用。

由于Integer类的API说“静态工厂valueOf(int)通常是更好的选择,因为它可能会产生明显更好的空间和时间性能。”和JLS说“给定相应基元类型的值,通常不需要构造这些框类的新实例。建议的构造替代方法是自动装箱或valueOf静态工厂方法。在大多数情况下,自动装箱将起作用,因此类型为基元的表达式可用于需要框类的位置

但是这个范围之外的值会发生什么? 例如,Integer x = Integer.valueOf(456)是每次执行类时都是一个新对象?

2 个答案:

答案 0 :(得分:6)

两个

Integer x = Integer.valueOf(456);

Integer x = 456;

将始终导致创建Integer的新实例,因为456超出了Integer缓存的范围。

您可以通过编写

进行测试
Integer x1 = Integer.valueOf(456);
Integer x2 = Integer.valueOf(456);
System.out.println(x1==x2);

将打印false

答案 1 :(得分:1)

首先为什么要烦恼这些细节 - 比较 "babel-preset-env": "^1.6.1", "babel-preset-react": "^6.24.1", "webpack": "^3.8.1" 对象的正确方法是使用:

Integer或更好if (x.intValue() == y.intValue())

在任何情况下都不要依赖有缓存的事实,因为这个缓存的上限可以作为属性更改,你可以通过:

x.equals(y)