`

关于判断两个对象是否相等的问题

    博客分类:
  • java
 
阅读更多

起源面试中面试官问我的一个问题:

long l1 = 10L

long l2 = 10L

问: l1==l2 是true还是false

我毫不犹豫回答true

他接着问,为什么?

我卡住了,回答不上来。

紧接着,

Object o1 = new Object() ;

Object o2 = new Object() ;

问:o1==o2 是true还是false

我回答是false

他又说了,为什么呢?

我回答,因为o1和o2是指向不同的对象。

他:那为什么上面就不是指向不同的对象了么?

。。。

好吧,我承认,我回答不上来。

回来之后,查了相关资料,特此把心得留在这里。

 

有些东西看起来确实理所当然,理所当然到你想不到原因,归根结底还是我的知识不够全面。

 

JVM内存分为栈内存和堆内存,栈内存主要存储基本类型的变量以及变量的引用,栈内存是可以共享数据的,用完之后自动回收。堆内存无法实现数据的共享,在无引用之后,要由垃圾回收器进行回收。

 

此次的问题就在于这里,

long l1,long l2

是定义两个变量,开辟的是两个内存空间,而内存空间存储的值是指向10L所在内存的地址,t1==t2比较的两个内存存储的值是否相同,10L是存储在栈内存中,基于数据共享原则,在栈内存中只有一个10L,t1和t2都是指向当前10L所在的地址。

 

而 Object o1 ,和Object O2,

这两个变量分别指向的是堆内存中两个对象的地址,而这两个对象在堆内存中是不同的两个对象,地址不相同,o1==o2为false

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics