基本类型都是存在栈里面的,Int a=3;当你int b=3的时候,jvm会干嘛呢?首先,它会去栈里面找是不是已经有一个数据为3了。如果不是的话新建一个地址,是的话,就把b指向这个地址,
所以对于基本类型来说,当值相同的时候,地址也是相同的,所以当你对基本类型==的时候,内容相同的肯定返回的是true。。因为实质上,他们的地址也是相同的
但是对于其他类型,都是存在堆里面的动态分配内存,所以每一次新建一个数据都会动态分配一个内存地址,所以==的时候,当然内存地址是不一样的。
要记住, ==永远是用来比较内存中的地址的,基本类型感觉上是在比较内容,实际上还是在比较地址!
但是对于其他类型,都是存在堆里面的动态分配内存,所以每一次新建一个数据都会动态分配一个内存地址,所以==的时候,当然内存地址是不一样的。
要记住, ==永远是用来比较内存中的地址的,基本类型感觉上是在比较内容,实际上还是在比较地址!
作者:Mao Bravo
链接:https://www.zhihu.com/question/29451160/answer/45024115
来源:知乎
为什么基本数据类型就是比较内容,而对象则是比较地址?
这个问题可以参考享元模式,这个设计是为了避免大量拥有相同内容对象的内存开销。
比如下面这个例子
Integer i1 = 20;
Integer i2 = 20 ;
System.out.println(i1 == i2); // true
Integer i3 = 200;
Integer i4 = 200 ;
System.out.println(i3 == i4); // false
作者:于光荣
链接:https://www.zhihu.com/question/29451160/answer/44870700
来源:知乎