我是这样理解的,Integer是封装类型,是类,是对象,
如:Integer i7 = 128;是在栈内存中创建了i7这个对象引用的变量,而在堆内存中开辟了存放128的内存
而,Integer i8 = 128在栈内存中又创建了i8这个对象引用的变量,而在堆内存中又开辟了存放128的内存
这样看来,i7和i8中存储的堆内存地址不一样,当然就i7==i8就是false了。
扩展,字符串的话,在这个地方有个优化,就是有字符串池,就是如果之前定义了一个字符串的话,字符串池中没有这个值的话,这个值就会放到字符串池中,当再有字符串定义这个值时,会自动调用字符串池中的相应的值,没有的话再放入字符串值,以此类推;
如图 |
|