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

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

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

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

最佳答案

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);

这将打印错误.

转载注明原文:使用java 9创建包装类的对象 - 代码日志