当前位置: 首页 > 知识库问答 >
问题:

用Java9创建包装类的对象

魏毅
2023-03-14

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

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

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

共有1个答案

罗寒
2023-03-14

两者兼而有之

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);
 类似资料:
  • 我有一个如下所示的基类: 我想创建一个具有以下功能的只读包装类: 更确切地说,我希望类的所有字段都是只读的,但只有在调用之后,否则类就不能在构造函数本身中构造。我知道可以使用属性装饰器来完成,但我不想把所有属性都变成属性。

  • 问题内容: 我有使用Maven创建jar文件的要求,但是需要使用“ foobar”扩展名将它们安装到存储库中,如果它们可以具有自己的打包类型,那么这很好,以便我们可以通过打包来识别这些工件。 我可以设置新的包装类型吗? 问题答案: 要做到像你描述,创建包装Maven项目 罐子 (如说在这里,因为不会有魔力的定义)。在src / main / resources / META-INF / plexu

  • 本文向大家介绍如何在Java 9中的JShell中创建包装对象?,包括了如何在Java 9中的JShell中创建包装对象?的使用技巧和注意事项,需要的朋友参考一下 我们可以使用new运算符来创建Wrapper类的实例,还可以在Integer等类型中使用valueOf()方法来创建包装器对象。 Integer.valueOf()方法将重用现有Integer对象与在堆上相同的值。如果堆中存在具有相同值

  • 主要内容:Python类的实例化,Python类对象的使用通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象。 创建类对象的过程,又称为类的实例化。 Python类的实例化 对已定义好的类进行实例化,其语法格式如下: 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或者添加的 __init__() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。 例如,如下代码创建了名为 CLang

  • 公共类DoSomething{private static final Logger Logger=LoggerFactory.getLogger(DoSomething.class); 我试图创建一个LogMessage的对象。并在DoSomething类的方法中使用它。这是好的还是我应该移动方法中的行?

  • 好尝试在google和此处查找,但失败。以下是我的故事: Spring MVC 3.1.1版本 Spring Data JPA 1.1.0版本 Hibernate3.6.9。最终版本 问题:我有方法保存(…)使用@Transactional(传播=传播。需要\u NEW)注释。但未创建事务。 其他发现:1)当我使用来自其他服务的@Transactional方法进行注释时,正在创建事务。 2)此方法