```
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值也就不同了。