Java中局部变量int基本类型变量在栈上是如何存储的,是内存地址还是值?

```
int a = 1;
int c = 1;
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(c));
System.out.println(System.identityHashCode(1));
a = 127;
c = 127;
System.out.println(System.identityHashCode(c));
System.out.println(System.identityHashCode(c));
a = 128;
c = 128;
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(c));
```
结果:

```
865113938
865113938
865113938
1442407170
1442407170
1028566121
1118140819
```
System.identityHashCode输出的是变量内存地址哈希值?
为什么a变量和c变量的内存地址一样?
128输出的是却不一样,而-128~127之间的输出的是一样的,是不是说明栈上存储的是内存地址呢?
还是说System.identityHashCode输出的不是变量内存地址?
以上的代码输出怎么理解?

    你这个问题,跟基本类型没有关系。

    调用该方法, 该方法的参数为Object,所以会涉及到自动装箱, 也就是会为基本类型创建对象。

    自动装箱,

    为了避免重复创建, 在-128到127这256个数是取SMALL_VALUES = new Integer[256]里面的预先创建好的对象,也就是装箱后引用的是相同的对象。

    不在这个范围的整型值就会重新new一个对象,自然hash值也就不同了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-05
当然是内存地址呀。
相似回答