首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向原语值的Java包装类引用

指向原语值的Java包装类引用
EN

Stack Overflow用户
提问于 2018-03-13 10:09:01
回答 3查看 156关注 0票数 1

我对像IntegerCharacter这样的Java包装类有疑问。我知道,当我们声明一个类Abc并可以在Java中为它创建一个对象时,

代码语言:javascript
复制
Abc a = new Abc(); 

它实例化了对Abc类的引用,并且我们有包含变量值的字段。我怀疑,当我们创建Integer类时,如下所示:

代码语言:javascript
复制
Integer i = 5;

它如何指向值5?它不应该包含一个包含其值并指向Integer对象的字段,如下所示:

代码语言:javascript
复制
static int value; // To hold value 5 for Integer class
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-13 10:30:57

它如何指向值5?

它指向一个包含该原始值的Integer实例。

代码语言:javascript
复制
Integer i = Integer.valueOf(5);

这是new Integer(5)的一个稍微优化的版本(这个版本从Java9开始就不再受欢迎了)。该过程称为自动拳击,由编译器生成。

它不应该包含一个包含它的值的字段吗?

它确实包含一个字段。尽管如此,它不应该是静态的,并且对整个类是共享的。

代码语言:javascript
复制
private final int value;

实际上,除非指定了更大的Integer.valueOf(5)值,否则将从缓存以及范围[-128, 127]中的任何值中提取java.lang.Integer.IntegerCache.high

票数 1
EN

Stack Overflow用户

发布于 2018-03-13 10:26:18

引用Integer的Javadoc

Integer类型的对象包含一个类型为int的字段。

所以是的,在自动装箱返回的对象中有一个类型为int的字段。自动装箱返回的Integer对象可能是

  • 新创建,或
  • 从缓存中返回;

但是,它将与由valueOf类的静态Integer方法返回的对象相同。

对这个问题的回答可以帮助您理解valueOf (因此是自动装箱)创建新对象的时间,以及它何时返回现有对象。

票数 1
EN

Stack Overflow用户

发布于 2018-03-13 10:11:31

代码语言:javascript
复制
Integer i = 5;

由此,编译器将使Integer i = Integer.valueOf(5);(自动装箱)

也请参阅Oracle文档

自动拳击与反拳击

数字类

不可变对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49253377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档