Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包装类对象初始化是如何工作的?_Java - Fatal编程技术网

Java 包装类对象初始化是如何工作的?

Java 包装类对象初始化是如何工作的?,java,Java,在爪哇 Integer作为包装类。当它只是一个对象引用时,它是如何初始化的?有人能解释一下吗?声明 Integer i=10; 缩写为: Integer i = 10; 因此,Java首先创建一个名为i的变量,该变量可以引用Integer类型的实例 在执行右侧之后,10是类型为int的整数文本(请参阅)。然后Java尝试将int分配给Integer变量i。类型不同,对于常规情况,无法进行分配 但是,Java能够自动将int转换为Integer,反之亦然。这称为自动装箱,Java可以对所有原语

在爪哇

Integer
作为包装类。当它只是一个对象引用时,它是如何初始化的?有人能解释一下吗?

声明

Integer i=10;
缩写为:

Integer i = 10;
因此,Java首先创建一个名为
i
的变量,该变量可以引用
Integer
类型的实例

在执行右侧之后,
10
是类型为
int
的整数文本(请参阅)。然后Java尝试将
int
分配给
Integer
变量
i
。类型不同,对于常规情况,无法进行分配

但是,Java能够自动将
int
转换为
Integer
,反之亦然。这称为自动装箱,Java可以对所有原语及其包装器执行此操作(请参阅)

因此Java使用
Integer.valueOf(10)
int
10
转换为包装类型
Integer
。事实上,由于这个数字很小(
-128
+127
),因此该方法从内部池返回一个缓存的
整数,而不是创建一个新实例

因此,在Java magic之后,您的代码是:

Integer i; // Variable declaration
i = 10; // Variable assignment
这是一个有效的赋值,因为右侧也是一个
整数
,不再是
int


实际上,JLS中没有描述
Integer.valueOf
的用法。它只是说Java必须能够自动将
int
转换为
Integer
(from):

如果
p
int
类型的值,则装箱转换将
p
转换为类和类型
Integer
的引用
r
,从而
r.intValue()==p

但是大多数JVM实现都使用这种方法(您可以在生成的字节码中看到这一点)。

请参见Oracle的Java教程。
Integer i = Integer.valueOf(10);