为什么 increment in reference of integer class 对象操纵整数值?
why is increment in reference of integer class object manipulates integer value?
我有一个基本的疑问,我们可以增加 Integer class 对象的引用,而不能引用任何其他 class(D class 有 1 个 Integer 数据成员和一个参数化构造函数)。
Integer x=new Integer(10); x++;
D d=new D(10); d++;
这里 x 和 d 都是引用,我们仍然可以增加整数引用,而不是任何其他引用。我缺少一些非常基本的东西,请帮帮我。
这是因为包装器 类 的自动装箱是从 jdk 1.5 引入的。在内部 java 会将整数引用转换为 int 并递增它。您不能增加对象。
Integer x=new Integer(10); x++;
此处java 编译器将执行对象的un-boxing
,将Integer
对象转换为原始int
。然后将执行增量操作。这仅适用于 java 基元,auto-boxing
正在将基元转换为包装对象,其逆向调用 un-boxing
。这就是这里发生的事情。
auto-boxing
或 un-boxing
是一个自动转换,它只为 java 原语定义。所以不能对其他对象执行。请记住,对象不仅仅是像 C or C++
这样我们可以递增它们的内存引用。
Java 无法为任意 类 重载运算符。因此,D d; d++
不可用。你可以这样做:
public class D {
private int value;
public D( int v ){
value = v;
}
public void increment(){
value++;
}
}
现在你可以做
D d = new D(10);
d.increment();
d 的值为 11。
根据Oracle Java Documentation,将原始数据类型自动转换为其等效包装类型称为autoboxing
,而相反的操作称为unboxing
。每当我们在表达式中使用包装器 class 的对象时,自动拆箱和自动装箱由 JVM 完成。
Integer object;
object = 100; //Autoboxing of int
++object;
当我们对Integer对象进行自增操作时,会先拆箱,自增,再重新装箱成Integer类型的对象。你也可以看看How java auto boxing/unboxing works?
我有一个基本的疑问,我们可以增加 Integer class 对象的引用,而不能引用任何其他 class(D class 有 1 个 Integer 数据成员和一个参数化构造函数)。
Integer x=new Integer(10); x++;
D d=new D(10); d++;
这里 x 和 d 都是引用,我们仍然可以增加整数引用,而不是任何其他引用。我缺少一些非常基本的东西,请帮帮我。
这是因为包装器 类 的自动装箱是从 jdk 1.5 引入的。在内部 java 会将整数引用转换为 int 并递增它。您不能增加对象。
Integer x=new Integer(10); x++;
此处java 编译器将执行对象的un-boxing
,将Integer
对象转换为原始int
。然后将执行增量操作。这仅适用于 java 基元,auto-boxing
正在将基元转换为包装对象,其逆向调用 un-boxing
。这就是这里发生的事情。
auto-boxing
或 un-boxing
是一个自动转换,它只为 java 原语定义。所以不能对其他对象执行。请记住,对象不仅仅是像 C or C++
这样我们可以递增它们的内存引用。
Java 无法为任意 类 重载运算符。因此,D d; d++
不可用。你可以这样做:
public class D {
private int value;
public D( int v ){
value = v;
}
public void increment(){
value++;
}
}
现在你可以做
D d = new D(10);
d.increment();
d 的值为 11。
根据Oracle Java Documentation,将原始数据类型自动转换为其等效包装类型称为autoboxing
,而相反的操作称为unboxing
。每当我们在表达式中使用包装器 class 的对象时,自动拆箱和自动装箱由 JVM 完成。
Integer object;
object = 100; //Autoboxing of int
++object;
当我们对Integer对象进行自增操作时,会先拆箱,自增,再重新装箱成Integer类型的对象。你也可以看看How java auto boxing/unboxing works?