在面试中常常被问到“==” 与equals的区别,那我们就这个问题讨论
首先我们知道内存分配知识
- 在JVM中,内存分为堆内存跟栈内存。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。
equals与"=="的区别:
“==”比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。
equals是判断两个变量或实例所指向的内存空间的值是不是相同
注:此图片为网络图片,如有侵权,联系删除
总结:
1、功能不同
"=="是判断两个变量或实例是不是指向同一个内存空间。
"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。
即: ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
2、定义不同
"equals"在JAVA中是一个方法。
"=="在JAVA中只是一个运算符合。
==指引用是否相同, equals()指的是值是否相同