"=="与“equals()”的区别

lihongxu2010 2010-11-02 06:22:25
class Code {
public static void main(String[] args) {
String a = "abc";
String b="ab";
String c=b+"c";
System.out.println(a.equals(c));

String a = "abc";
String b="ab";
String c=b+"c";
System.out.println(a==c);

}
}
请各位高手指点:帮忙分析一下内存。谢上。
...全文
424 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
213 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 javaproducts 的回复:]
支持!

引用 23 楼 ibm_hoojo 的回复:
CSS code
==是值比较,equals是引用内存地址比较
但在Object对象中,== 和 equals是一样的。都是值比较,这点要注意!!
[/Quote]
在Object对象中,== 和 equals是一样的。都是地址进行比较吧!
而且我想问String a="abc";
String b=a;
String c=a+b;
C所指向的地址是:
zhuyongjun 2010-11-03
  • 打赏
  • 举报
回复
equals 比较内容
== 比较内存地址

比如
a = "abc";
b="ab";
c=b+"c";
这个 用 == 是不行的,用 equls 可以

但是,如果是
a = "abc";
c="ab"+"c";
用 == 也是true,因为它们的内存地址一样
javaproducts 2010-11-03
  • 打赏
  • 举报
回复
支持!
[Quote=引用 23 楼 ibm_hoojo 的回复:]
CSS code
==是值比较,equals是引用内存地址比较
但在Object对象中,== 和 equals是一样的。都是值比较,这点要注意!!
[/Quote]
ansensp 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vysnow 的回复:]
"equals()"比较的是在内存地址空间的内容是否相同;

"=="比较的是在内存空间的地址是否相同,

a和c的存储地址是不同的,但是内容相同,

所以 equals()的值为true,而 == 的值为false
[/Quote]

正解
qunhao 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vysnow 的回复:]
"equals()"比较的是在内存地址空间的内容是否相同;

"=="比较的是在内存空间的地址是否相同,

a和c的存储地址是不同的,但是内容相同,

所以 equals()的值为true,而 == 的值为false
[/Quote]

同意。
bossdd521 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vysnow 的回复:]
"equals()"比较的是在内存地址空间的内容是否相同;

"=="比较的是在内存空间的地址是否相同,

a和c的存储地址是不同的,但是内容相同,

所以 equals()的值为true,而 == 的值为false
[/Quote]
...
reggiekiller 2010-11-03
  • 打赏
  • 举报
回复
看了很多遍了,印象越来越深,哇咔咔
TC_CT 2010-11-03
  • 打赏
  • 举报
回复
同意1楼的,
==判断地址是否相同
equals判断对象是否相同,equals是object的方法,可以重载
孤独剑客 2010-11-03
  • 打赏
  • 举报
回复
八百年前的老问题啦,lz 木有JJ
powerchuangwai 2010-11-03
  • 打赏
  • 举报
回复
一楼正解。。


一般来说,用equals比较多一些。
ischarles 2010-11-03
  • 打赏
  • 举报
回复
==:比较引用
equals: 比较值
mengyalizuopeng 2010-11-03
  • 打赏
  • 举报
回复
2L正确,这个问题在这个坛子上 出现好多次了,有意思吗 ?
winer1220 2010-11-03
  • 打赏
  • 举报
回复
建议楼主看一下jdk的源码,看完源码,你什么都清楚了,其实String是重写了Object的equals的方法
简单理解就是
equals比较的是内容
==比较的内存地址
magicluo 2010-11-03
  • 打赏
  • 举报
回复
浅尝辄止

一楼完全对吗? 糊弄新手...

诶 。。。
降龙 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vysnow 的回复:]

"equals()"比较的是在内存地址空间的内容是否相同;

"=="比较的是在内存空间的地址是否相同,

a和c的存储地址是不同的,但是内容相同,

所以 equals()的值为true,而 == 的值为false
[/Quote]
正解!equals比较的是值,而"=="比较的则是地址。。。
爆米团 2010-11-03
  • 打赏
  • 举报
回复

比较的内容不同~~
学习一下···
soft_spider 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vysnow 的回复:]
"equals()"比较的是在内存地址空间的内容是否相同;

"=="比较的是在内存空间的地址是否相同,

a和c的存储地址是不同的,但是内容相同,

所以 equals()的值为true,而 == 的值为false
[/Quote]
大致说得比较明白了,楼主多看书吧。
yaojianquansb 2010-11-03
  • 打赏
  • 举报
回复
看帖必回是一種美德!
yjflinchong 2010-11-03
  • 打赏
  • 举报
回复
大家都说的很对呀。
润物wu声 2010-11-03
  • 打赏
  • 举报
回复
一楼的正解
加载更多回复(20)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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