equals与==的比较

liumingwei2009 2009-10-29 05:50:09
使用equals方法可以比较两个字符串是否相等,因为String重写了Object的equals方法,而==运算符比较两个对象引用是否相同的实例。

public class TestToString {

public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";//String s2 = new String("hello");改成这样的话,它又是false了。 System.out.println(s1 == s2);//那我觉得这应该是false呀??为什么它是true????
}
}




大惑不解中。



...全文
67 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhuang_Victor 2012-04-20
  • 打赏
  • 举报
回复
因为每个月都有新的程序员啊!equals是比较对象值,==是比较对象的引用地址!一般都是用equals的比较多。
amdgaming 2009-10-29
  • 打赏
  • 举报
回复
月经了 。这种题 每 月都有。。。
henry_z 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 liumingwei2009 的回复:]
使用equals方法可以比较两个字符串是否相等,因为String重写了Object的equals方法,而==运算符比较两个对象引用是否相同的实例。Java codepublicclass TestToString {publicstaticvoid main(String[] args) {
String s1="hello";
String s2="hello";//String s2 = new String("hello");改成这样的话,它又是false了。 System.out.println(s1 == s2);//那我觉得这应该是false呀??为什么它是true???? }
}

大惑不解中。



[/Quote]
因为equals 比较的值是否相同 是因为Stirng 覆写了Object的equals方法
而 == 比较的是引用指向的内存地址
new Stirng(“hello”)是创建了一个实例 指的内存地址不一致 所以返回 false
建议去看看Stirng 的源代码 了解了解
fengboxjtu556 2009-10-29
  • 打赏
  • 举报
回复
对的,==比较地址,equal比较值
jinancf 2009-10-29
  • 打赏
  • 举报
回复
2楼和3楼说的很明白了。
cweijiaweil 2009-10-29
  • 打赏
  • 举报
回复
==比较的是地址 equals方法比较的值
cweijiaweil 2009-10-29
  • 打赏
  • 举报
回复
String s1="hello"; 声明一个String类型的 变量

String s2 = new String("hello");是声明一个String类型的对象

String s1="hello"; s1是放在内存常量区

String s2 = new String("hello");s2是放在内存堆空间里
zhuzeitou 2009-10-29
  • 打赏
  • 举报
回复
String s2 = "hello";
执行这个的时候会先在字符串池中寻找有没有"hello"这个字符串,有的话则直接指向那个地址,这里就直接指向了s1的地址

String s2 = new String("hello");
这个则不管有没有,直接开辟空间
zhuzeitou 2009-10-29
  • 打赏
  • 举报
回复
额,google一下字符串池吧……

62,615

社区成员

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

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