Java 包装器 class 指向原始值的引用
Java Wrapper class reference pointing to a primitive value
我对 Java 包装器 class 有疑问,例如 Integer
、Character
。我知道当我们声明一个 class Abc
并且可以在 Java 中为它创建一个对象时
Abc a = new Abc();
它实例化了一个参考 Abc
class 并且我们有包含变量值的字段。我的疑问是,当我们创建 Integer
class 时:
Integer i = 5;
它如何指向值5
?它不应该包含一个字段,该字段包含其值并指向 Integer
对象,如:
static int value; // To hold value 5 for Integer class
Integer i = 5;
由此,编译器将Integer i = Integer.valueOf(5);
(自动装箱)
另请参阅
中的 Oracle 文档
An object of type Integer contains a single field whose type is int.
所以是的,自动装箱返回的对象中有一个 int
类型的字段。自动装箱返回的 Integer
对象可能是
- 新建,或
- 从缓存返回;
但它将与Integer
class.
的静态valueOf
方法返回的对象相同
answers to this question 可以帮助您了解何时 valueOf
(以及自动装箱)创建新对象,以及何时 returns 现有对象。
How is it pointing to value 5?
它指向一个 Integer
保存原始值的实例。
Integer i = Integer.valueOf(5);
是 new Integer(5)
的优化版本(自 Java 9 起已弃用)。该过程称为 autoboxing 并由编译器生成。
Should not it contain a field which contains its value?
它确实包含一个字段。不过,它不应该是静态的,也不应该为整个 class.
共享
private final int value;
实际上,Integer.valueOf(5)
以及 [-128, 127]
范围内的任何值都将从缓存中获取,除非指定了更大的 java.lang.Integer.IntegerCache.high
值。
我对 Java 包装器 class 有疑问,例如 Integer
、Character
。我知道当我们声明一个 class Abc
并且可以在 Java 中为它创建一个对象时
Abc a = new Abc();
它实例化了一个参考 Abc
class 并且我们有包含变量值的字段。我的疑问是,当我们创建 Integer
class 时:
Integer i = 5;
它如何指向值5
?它不应该包含一个字段,该字段包含其值并指向 Integer
对象,如:
static int value; // To hold value 5 for Integer class
Integer i = 5;
由此,编译器将Integer i = Integer.valueOf(5);
(自动装箱)
另请参阅
中的 Oracle 文档An object of type Integer contains a single field whose type is int.
所以是的,自动装箱返回的对象中有一个 int
类型的字段。自动装箱返回的 Integer
对象可能是
- 新建,或
- 从缓存返回;
但它将与Integer
class.
valueOf
方法返回的对象相同
answers to this question 可以帮助您了解何时 valueOf
(以及自动装箱)创建新对象,以及何时 returns 现有对象。
How is it pointing to value 5?
它指向一个 Integer
保存原始值的实例。
Integer i = Integer.valueOf(5);
是 new Integer(5)
的优化版本(自 Java 9 起已弃用)。该过程称为 autoboxing 并由编译器生成。
Should not it contain a field which contains its value?
它确实包含一个字段。不过,它不应该是静态的,也不应该为整个 class.
共享private final int value;
实际上,Integer.valueOf(5)
以及 [-128, 127]
范围内的任何值都将从缓存中获取,除非指定了更大的 java.lang.Integer.IntegerCache.high
值。