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);