起源面试中面试官问我的一个问题:
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
相关推荐
这里包括两个对象数组判断和两个字符串数组判断希望能帮到大家!!
本文实例讲述了JS判断两个对象内容是否相等的方法。分享给大家供大家参考,具体如下: 我们知道,如果两个对象即使内容,JavaScript也会判断它们不相等。但是有时候,我们仅仅需要判断两个对象的内容是否相等。那么...
主要介绍了C#使用Equals()方法比较两个对象是否相等的方法,涉及C#操作对象的相关技巧,需要的朋友可以参考下
本js代码通过对js对象进行各方面的比较来判断两个对象是否相等 cmp = function( x, y ) { // If both x and y are null or undefined and exactly the same if ( x === y ) { return true; } // If they are not ...
输入两个年月日,(1)判断两个日期是否相同,并且将相差的天数显示出来;(2)将日期后推或前推N天,并将该日期输出。
本文实例讲述了JS判断两个数组或对象是否相同的方法。分享给大家供大家参考,具体如下: JS 判断两个数组是否相同 要判断2个数组是否相同,...JS 判断两个对象是否相同 这是网上某大神封装对比对象是否相同的 function
js判断数组是否相等的方法 两种场景: 1.数组完全相等 2.元素相同顺序不同
主要介绍了java 判断两个对象是否为同一个对象实例代码的相关资料,需要的朋友可以参考下
这篇文章主要介绍了基于JavaScript判断两个对象内容是否相等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ES6中有一个方法判断两个对象是否相等,这个方法...
检查数组2中是否包含数组1中的所有元素.个人上课的作业。仅供参考。
大家一定遇到过这样的情况,有两个日期对象,然后需要判断他们是否相等,下面来说下判断的方法
这种方式是比较两个对象的地址是否相等,而不是比较它们的值。例如: ```java String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2); // false ``` 在上面的例子中,虽然 `str1` 和 `...
代码: /** * 判断此对象是否是Object类型 * @param {Object} obj */ function isObject(obj){ return Object.prototype.toString.call(obj)==='[object Object]';...* 深度比较两个对象是否相同 *
比较list得到不同的对象 慎重注意list的大小变化和索引 精简算法
主要介绍了Python判断两个对象相等的原理,需要的朋友可以参考下
本文实例讲述了js中比较两个对象是否相同的方法。分享给大家供大家参考,具体如下: js中,很轻易就可以比较2个普通字符串/数字是否相同,但是,如何比较2个对象是否相同呢? 在此我便给出较为简单的方法,如下: /...