`

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

    博客分类:
  • 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

 

 

 

 

 

分享到:
评论

相关推荐

    C#如何判断两个文件是否完全相等

    ### C#中判断两个文件是否完全相等 #### 方法原理 两个文件被认为完全相等,不仅指它们具有相同的名称或路径,更重要的是它们包含完全一致的数据内容。因此,比较两个文件是否完全相等的核心在于对比它们的数据流...

    JavaScript中判断两个字符串是否相等的方法

    在JavaScript中判断两个字符串是否相等是编程基础中的重要内容,尤其对于初学者来说,理解字符串相等性的判断方法对于编写有效的代码至关重要。首先,要了解JavaScript提供了两种相等性运算符:“==”和“===”。这...

    js判断两个数组是否完全相同

    在JavaScript(JS)中,判断两个数组是否完全相同是一个常见的需求,这可能涉及到对对象数组或字符串数组的比较。在编程实践中,数组的相同性不仅仅是元素数量的匹配,还需要考虑元素的顺序和值的精确匹配。下面我们...

    C#使用Equals()方法比较两个对象是否相等的方法

    默认情况下,`Equals()` 方法会比较两个对象的内存地址,看它们是否指向同一个实例。如果两个对象是同一个实例,那么`Equals()`返回 `true`;否则,返回 `false`。例如,如果你有两个字符串对象,即使它们包含相同的...

    java 判断两个网址的主机名是否一样

    在Java编程中,判断两个网址的主机名是否相同是一个常见的任务,这通常涉及到网络编程和URL对象的使用。下面我们将详细探讨如何实现这个功能,并深入理解相关知识点。 首先,URL(Uniform Resource Locator)是统一...

    JS判断两个数组或对象是否相同的方法示例

    这个函数首先检查两个对象是否严格相等,其次判断两个对象是否都是对象类型,并且具有相同的构造函数。然后,它会遍历两个对象的所有自有属性,对每个属性递归地调用`cmp`函数比较属性值。对于对象或数组类型的属性...

    Java编程输入两个年月日,(1)判断两个日期是否相同,并且将相差的天数显示出来;(2)将日期后推或前推N天,并将该日期输出。

    - 使用`DateType`类来表示日期,并通过`bool`方法判断两个日期是否相同。 - 通过`ZongTian`方法计算每个日期距离某个参考点(通常是公元0年1月1日)的总天数,从而计算出两日期间的天数差。 ### 2. `DateType` 类的...

    JavaScript比较两个对象是否相等的方法

    本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 判断两个对象是否为同一个对象实例代码

    在Java编程语言中,判断两个对象是否为同一个对象实例是一个常见的需求,这涉及到对对象引用的理解和`equals()`与`==`操作符的区别。本文将详细介绍这两种方法,并通过示例代码来阐述如何进行正确的判断。 首先,`=...

    JS判断两个对象内容是否相等的方法示例

    在JavaScript中,判断两个对象的内容是否相等是一个常见的需求,但JavaScript本身的相等运算符(`==` 和 `===`)并不能满足这种需求,因为它们只检查引用的相等性,而不是值的相等性。当涉及到复杂的数据结构,如...

    js判断两个日期是否相等的方法

    要判断两个日期对象是否相等,可以通过比较两个日期对象调用`getTime()`方法返回的时间戳是否相同。 2. 直接相减的方法:可以将两个日期对象进行相减操作,得到的结果是两个日期之间相差的毫秒数。如果结果为0,则...

    js判断数组是否相等的方法

    在JavaScript中,判断两个数组是否相等是一个常见的需求,尤其在处理数据比较或者验证时。根据标题和描述,我们可以区分两种不同的场景: 1. **数组完全相等**:在这种情况下,不仅要求数组中的元素相同,而且元素...

    比较两个集合是否相同(比较两个List内容是否相同)

    比较两个集合是否相同(比较两个List内容是否相同) 利用Java反射机制,获取到字段名、方法名、字段值,进行逐个比较,此处本人封装好了工具类,接收的是泛型,调用者只需要传入两个实体List即可进行比较,返回true...

    C#判断两个ip是否在同一子网内

    本文将深入探讨如何使用C#语言判断两个IP地址是否处于同一子网内,以及相关的网络概念。 首先,我们需要理解IP地址的结构。IP地址由32位二进制数表示,通常以点分十进制的形式呈现,如192.168.1.1。每个部分代表8位...

    两个list比较 取不同的对象

    - 该类重写了`equals`方法,用于比较两个`Student`对象是否相同。这是实现列表比较的关键步骤之一。 3. **比较两个列表的不同项**: - 需要遍历第一个列表,对于每个元素,检查它是否存在于第二个列表中。 - ...

    基于JavaScript判断两个对象内容是否相等

    这篇文章主要介绍了基于JavaScript判断两个对象内容是否相等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ES6中有一个方法判断两个对象是否相等,这个方法...

    通过JS深度判断两个对象字段相同

    在JavaScript中,要深度判断两个对象的字段是否完全相同,需要编写一个函数,该函数能够递归地检查对象的每一个属性值。文章《通过JS深度判断两个对象字段相同》详细介绍了实现这一功能的方法,并提供了一个名为...

    自己写两个判断字符串数组是否相等或数组内容是否相同,大家看下怎么改进下

    标题提到的问题是关于如何判断两个字符串数组是否相等,或者它们的内容是否完全相同。这是一个基础但重要的编程问题,涉及到数组遍历、比较以及优化算法的思考。下面我们将详细探讨这个问题,并参考提供的`Tool.java...

    js验证日期格式,比较日期大小,判断两日期年月是否相同借鉴.pdf

    通过比较`getFullYear`和`getMonth`方法返回的值,我们可以判断两个日期是否处于相同的年份和月份。 ### 总结 以上三个函数提供了JavaScript中处理日期的基本能力:比较日期大小、验证日期格式以及判断两个日期...

Global site tag (gtag.js) - Google Analytics