JAVA Integer类型自加
2021-01-06 15:31
                         标签:shc   --   数据类型   valueof   ret   pop   void   method   不一致    JAVA语言中有一些基本数据类型,比如 对象的内存地址不一致,说明Integer对象执行++操作之后是返回一个新的Integer对象 关于Java字节码的介绍可以看一下这篇博客 JAVA Integer类型自加 标签:shc   --   数据类型   valueof   ret   pop   void   method   不一致    原文地址:https://www.cnblogs.com/migoo/p/12975512.htmlint,long,double...
这些数据类型可以支持一些运算操作符,其中对于int类型的++/--操作符Integer类型是一个对象类型,居然也可以支持++运算,那么问题来了一个
Integer对象执行++操作之后还是原来那个对象吗?测试代码
public class IntegerTest {
    @Test
    public void test() {
        Integer a = 1;
        System.out.println(System.identityHashCode(a));
        a++;
        System.out.println(System.identityHashCode(a));
    }
}
输出
105704967
392292416
可以通过查看汇编代码分析一下原因简化代码
public class IntegerTest {
    public void test() {
        Integer a = 1;
        a++;
    }
}
上述代码的字节码
Compiled from "IntegerTest.java"
public class com.migoo.common.IntegerTest {
  public com.migoo.common.IntegerTest();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."
我们主要关注8、13两行,底层使用了java/lang/Integer.intValue拆箱,然后自加,再通过java/lang/Integer.valueOf装箱,拆箱装箱操作之后变量a 所指向的对象就不是原来的对象了