我对像Integer,Character这样的Java包装类有疑问。我知道,当我们声明一个类Abc并可以在Java中为它创建一个对象时,
Abc a = new Abc(); 它实例化了对Abc类的引用,并且我们有包含变量值的字段。我怀疑,当我们创建Integer类时,如下所示:
Integer i = 5;它如何指向值5?它不应该包含一个包含其值并指向Integer对象的字段,如下所示:
static int value; // To hold value 5 for Integer class发布于 2018-03-13 10:30:57
它如何指向值5?
它指向一个包含该原始值的Integer实例。
Integer i = Integer.valueOf(5);这是new Integer(5)的一个稍微优化的版本(这个版本从Java9开始就不再受欢迎了)。该过程称为自动拳击,由编译器生成。
它不应该包含一个包含它的值的字段吗?
它确实包含一个字段。尽管如此,它不应该是静态的,并且对整个类是共享的。
private final int value;实际上,除非指定了更大的Integer.valueOf(5)值,否则将从缓存以及范围[-128, 127]中的任何值中提取java.lang.Integer.IntegerCache.high。
发布于 2018-03-13 10:26:18
Integer类型的对象包含一个类型为int的字段。
所以是的,在自动装箱返回的对象中有一个类型为int的字段。自动装箱返回的Integer对象可能是
但是,它将与由valueOf类的静态Integer方法返回的对象相同。
对这个问题的回答可以帮助您理解valueOf (因此是自动装箱)创建新对象的时间,以及它何时返回现有对象。
https://stackoverflow.com/questions/49253377
复制相似问题