求关于.equals和==的详细原理

xiaogui_1730 2011-10-17 03:11:12
public class Test {
public static void main(String[] args) {
String a = "123";
String b = a;
String c = a + b;
String d = "123123";
System.out.print(a == b);
System.out.print(a.equals(b));
System.out.print(c == d);
System.out.print(c.equals(d));
System.out.println(c);
System.out.println(d);
}
}
最好能有个栈和堆的分解图,详细点最好,谢谢大虾们,
...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵王爷 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chenchenyangll 的回复:]

引用某人的话(某人的名字和原话都不记得了。。)

String作比较就应该用.equals() 没有什么为什么
让你用你就用,你偏要==你自己蛋疼
[/Quote]

+1
chenchenyangll 2011-10-18
  • 打赏
  • 举报
回复
引用某人的话(某人的名字和原话都不记得了。。)

String作比较就应该用.equals() 没有什么为什么
让你用你就用,你偏要==你自己蛋疼
DeveloperSimon 2011-10-17
  • 打赏
  • 举报
回复
学习来的(⊙o⊙)
wangleiggloveyou 2011-10-17
  • 打赏
  • 举报
回复
只要区分字面量就好了。
chenjian98 2011-10-17
  • 打赏
  • 举报
回复
==比较的不仅是内容,也比较地址
equals仅仅比较内容
原来缘来 2011-10-17
  • 打赏
  • 举报
回复
String重写了equals(),很多类没有重写equals()
luyun2011 2011-10-17
  • 打赏
  • 举报
回复
==比较的不仅是内容,也比较地址
equals仅仅比较内容
孟祥月 2011-10-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/mengxiangyue/article/details/6816186
这篇文章详细的介绍了,楼主可以去看看
liju123456 2011-10-17
  • 打赏
  • 举报
回复
学习了
Antineutrino 2011-10-17
  • 打赏
  • 举报
回复
我很怀疑怎么老是有人问这个问题
你去看看java虚拟机规范关于字符串常量池的内容吧
nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
String 类 之所以相等 是因为String类的equals方法被重写了它是把字符串拆分字符然后一个个分别去比较。所以此时就是比较内容了。
造成这种误解的原因,也就是因为很多类重写了equals方法,所以只要弄清楚当前类的情况,就很容易区分了

总结:
从Object层次来说,==与equals是相同的,都是比较内存地址;
当某个类重写了equals方法,此时equals就是比较内容,==永远是比较内存地址;

nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {
String a = "123";
String b = a;
String c = a + b;
String d = "123123";
System.out.print(a == b); // true ;因为经过编译器优化 所以 a b 指向同一个内存
System.out.print(a.equals(b));//ture ;String类的equals比较的是内容
System.out.print(c == d);//false C是生成新的对象 内存地址不同
System.out.print(c.equals(d));//ture ;String类的equals比较的是内容
System.out.println(c);//输出 123123
System.out.println(d);//输出 123123

}
}
frank_29 2011-10-17
  • 打赏
  • 举报
回复
能力有限,帮顶~

62,623

社区成员

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

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