== 与 equals的区别?

wcz12345678 2012-03-05 08:09:51
如题.
...全文
123 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ihrthk 2012-03-06
  • 打赏
  • 举报
回复
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

1、对于Java的八大基本数据类型(float double byte short int long char boolean)要判断相等只能用== ,不能用equals
2、对于这些数据的封装类进行比较的时候,既可以用==,也可以用equals,但是含义不一样
== 是判断是否同一个对象(也就是对象的内存地址),equals是判断值是否相等,不管是否同一个对象
devin_jia 2012-03-06
  • 打赏
  • 举报
回复
好多这个
菖蒲老先生 2012-03-06
  • 打赏
  • 举报
回复
一个比内容
一个比地址
candiceChan7 2012-03-06
  • 打赏
  • 举报
回复
'=='比较的是内存地址,'equals'比较的是对象的内容,即他的值

举例:

String s1,s2,s3;
s1 = new String("1");
s2 = "1";
s3 = "3";

System.out.println (s1==s2);
System.out.println (s1.equals(s2));

结果为:true false


另外建议lz也可以了解下这两者与hashcode的比较、这个面试问得更多~
fedori 2012-03-06
  • 打赏
  • 举报
回复
==和equals方法比较地址,equals方法可以通过override复写来比较内容,并且override hascode。
qybao 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 abstruct 的回复:]
+1
但是如果是Integer i = new Integer(42); Long l = new Long(42);
那么i.equals(l);这个又是否为true呢? 这个却是false
[/Quote]

==是比较两个变量的内存地址的内容是否相同
比如 a == b,就是比较 变量a的内存和变量b的内存是否相同
equals是比较两个变量所引用的对象的值是否相同
比如 a.equals(b),就是比较 变量a的内存中所保存的对象地址的内容和变量b的内存中所保存对象地址的内容是否相同
Integer i = new Integer(42); Long l = new Long(42);
那么i的内存地址保存的Integer(42)对象的地址,该地址保存的内容Integer对象的信息
而l的内存保存的是Long(42)对象的地址,该地址保存的内容是Long对象的信息
因为是Integer和Long是不同的两个对象,内存信息是不一样的(内存初始化处理也不一样),所以equals就是false
wby13579 2012-03-06
  • 打赏
  • 举报
回复
月经贴
sweat89 2012-03-06
  • 打赏
  • 举报
回复
月经贴
安特矮油 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dreamslink2010 的回复:]
1、对于Java的八大基本数据类型(float double byte short int long char boolean)要判断相等只能用== ,不能用equals
2、对于这些数据的封装类进行比较的时候,既可以用==,也可以用equals,但是含义不一样
== 是判断是否同一个对象(也就是对象的内存地址),equals是判断值是否相等,不管是否同一个对象
不知道通过上述两点能明白否?……
[/Quote]
+1
但是如果是Integer i = new Integer(42); Long l = new Long(42);
那么i.equals(l);这个又是否为true呢? 这个却是false
Ajava攻城师 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 abstruct 的回复:]

引用 2 楼 dreamslink2010 的回复:
1、对于Java的八大基本数据类型(float double byte short int long char boolean)要判断相等只能用== ,不能用equals
2、对于这些数据的封装类进行比较的时候,既可以用==,也可以用equals,但是含义不一样
== 是判断是否同一个对象(也就是对象的内存地址),equals是判断值是……
[/Quote]

“不管是否同一个对象”,纠正一下这个句话给大家带来的困扰,正如6楼这位兄弟所举的例子,Long类型跟Integer类型去equals肯定是false的,因为他们是不同的的类型。我说的同一个对象是指你程序中new实例的化的对象
昨日凡阳 2012-03-06
  • 打赏
  • 举报
回复
在集合中的时候,就不能单纯用equals直接比了,不然会影响效能,结合hashcode效果更佳
昨日凡阳 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dreamslink2010 的回复:]

1、对于Java的八大基本数据类型(float double byte short int long char boolean)要判断相等只能用== ,不能用equals
2、对于这些数据的封装类进行比较的时候,既可以用==,也可以用equals,但是含义不一样
== 是判断是否同一个对象(也就是对象的内存地址),equals是判断值是否相等,不管是否同一个对象
不知道通过上述两点能明白否……
[/Quote]

又来了,在csdn都发霉的问题了。
Acesidonu 2012-03-05
  • 打赏
  • 举报
回复
== 比较的是两者在内存栈中的值

equals 是比较的方法,该方法怎么实现的就怎么比较两者

龙四 2012-03-05
  • 打赏
  • 举报
回复
ljfolo59 2012-03-05
  • 打赏
  • 举报
回复
2楼讲的挺详细的,学习了
Ajava攻城师 2012-03-05
  • 打赏
  • 举报
回复
1、对于Java的八大基本数据类型(float double byte short int long char boolean)要判断相等只能用== ,不能用equals
2、对于这些数据的封装类进行比较的时候,既可以用==,也可以用equals,但是含义不一样
== 是判断是否同一个对象(也就是对象的内存地址),equals是判断值是否相等,不管是否同一个对象
不知道通过上述两点能明白否?
zglin689 2012-03-05
  • 打赏
  • 举报
回复
对于在String类来说,'=='比较的是地址,'equals'比较的是对象的内容

50,539

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧