[英]Java Wrapper class reference pointing to a primitive value
我对Java包装器类(例如Integer
, Character
有疑问。 我知道当我们声明一个类Abc
并可以在Java中为其创建对象时
Abc a = new Abc();
它通过引用Abc
类实例化a,因为我们有包含变量值的字段。 我的疑问是,当我们创建Integer
类时,如下所示:
Integer i = 5;
它如何指向值5
? 它不应该包含一个包含其值并指向Integer
对象的字段,例如:
static int value; // To hold value 5 for Integer class
类型为Integer的对象包含一个类型为int的字段。
所以是的,自动装箱返回的对象中有一个int
类型的字段。 自动装箱返回的Integer
对象可能是
但是它将与Integer
类的static valueOf
方法返回的对象相同。
该问题的答案可能有助于您了解valueOf
(并因此自动装箱)何时创建新对象以及何时返回现有对象。
它如何指向价值5?
它指向一个保存该原始值的Integer
实例。
Integer i = Integer.valueOf(5);
这是new Integer(5)
优化版本new Integer(5)
自Java 9开始不推荐使用)。 该过程称为自动装箱 ,由编译器完成。
它不应该包含一个包含其值的字段吗?
它确实包含一个字段。 但是,它不应该是静态的,并在整个类中共享。
private final int value;
实际上,除非指定了更大的java.lang.Integer.IntegerCache.high
值[-128, 127]
否则将从缓存中获取Integer.valueOf(5)
以及范围[-128, 127]
中的任何值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.