起源面试中面试官问我的一个问题:
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
相关推荐
### C#中判断两个文件是否完全相等 #### 方法原理 两个文件被认为完全相等,不仅指它们具有相同的名称或路径,更重要的是它们包含完全一致的数据内容。因此,比较两个文件是否完全相等的核心在于对比它们的数据流...
在JavaScript中判断两个字符串是否相等是编程基础中的重要内容,尤其对于初学者来说,理解字符串相等性的判断方法对于编写有效的代码至关重要。首先,要了解JavaScript提供了两种相等性运算符:“==”和“===”。这...
在JavaScript(JS)中,判断两个数组是否完全相同是一个常见的需求,这可能涉及到对对象数组或字符串数组的比较。在编程实践中,数组的相同性不仅仅是元素数量的匹配,还需要考虑元素的顺序和值的精确匹配。下面我们...
默认情况下,`Equals()` 方法会比较两个对象的内存地址,看它们是否指向同一个实例。如果两个对象是同一个实例,那么`Equals()`返回 `true`;否则,返回 `false`。例如,如果你有两个字符串对象,即使它们包含相同的...
在Java编程中,判断两个网址的主机名是否相同是一个常见的任务,这通常涉及到网络编程和URL对象的使用。下面我们将详细探讨如何实现这个功能,并深入理解相关知识点。 首先,URL(Uniform Resource Locator)是统一...
这个函数首先检查两个对象是否严格相等,其次判断两个对象是否都是对象类型,并且具有相同的构造函数。然后,它会遍历两个对象的所有自有属性,对每个属性递归地调用`cmp`函数比较属性值。对于对象或数组类型的属性...
- 使用`DateType`类来表示日期,并通过`bool`方法判断两个日期是否相同。 - 通过`ZongTian`方法计算每个日期距离某个参考点(通常是公元0年1月1日)的总天数,从而计算出两日期间的天数差。 ### 2. `DateType` 类的...
本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 ...
在Java编程语言中,判断两个对象是否为同一个对象实例是一个常见的需求,这涉及到对对象引用的理解和`equals()`与`==`操作符的区别。本文将详细介绍这两种方法,并通过示例代码来阐述如何进行正确的判断。 首先,`=...
在JavaScript中,判断两个对象的内容是否相等是一个常见的需求,但JavaScript本身的相等运算符(`==` 和 `===`)并不能满足这种需求,因为它们只检查引用的相等性,而不是值的相等性。当涉及到复杂的数据结构,如...
要判断两个日期对象是否相等,可以通过比较两个日期对象调用`getTime()`方法返回的时间戳是否相同。 2. 直接相减的方法:可以将两个日期对象进行相减操作,得到的结果是两个日期之间相差的毫秒数。如果结果为0,则...
在JavaScript中,判断两个数组是否相等是一个常见的需求,尤其在处理数据比较或者验证时。根据标题和描述,我们可以区分两种不同的场景: 1. **数组完全相等**:在这种情况下,不仅要求数组中的元素相同,而且元素...
比较两个集合是否相同(比较两个List内容是否相同) 利用Java反射机制,获取到字段名、方法名、字段值,进行逐个比较,此处本人封装好了工具类,接收的是泛型,调用者只需要传入两个实体List即可进行比较,返回true...
本文将深入探讨如何使用C#语言判断两个IP地址是否处于同一子网内,以及相关的网络概念。 首先,我们需要理解IP地址的结构。IP地址由32位二进制数表示,通常以点分十进制的形式呈现,如192.168.1.1。每个部分代表8位...
- 该类重写了`equals`方法,用于比较两个`Student`对象是否相同。这是实现列表比较的关键步骤之一。 3. **比较两个列表的不同项**: - 需要遍历第一个列表,对于每个元素,检查它是否存在于第二个列表中。 - ...
这篇文章主要介绍了基于JavaScript判断两个对象内容是否相等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ES6中有一个方法判断两个对象是否相等,这个方法...
在JavaScript中,要深度判断两个对象的字段是否完全相同,需要编写一个函数,该函数能够递归地检查对象的每一个属性值。文章《通过JS深度判断两个对象字段相同》详细介绍了实现这一功能的方法,并提供了一个名为...
标题提到的问题是关于如何判断两个字符串数组是否相等,或者它们的内容是否完全相同。这是一个基础但重要的编程问题,涉及到数组遍历、比较以及优化算法的思考。下面我们将详细探讨这个问题,并参考提供的`Tool.java...
通过比较`getFullYear`和`getMonth`方法返回的值,我们可以判断两个日期是否处于相同的年份和月份。 ### 总结 以上三个函数提供了JavaScript中处理日期的基本能力:比较日期大小、验证日期格式以及判断两个日期...