大家帮我解释一下String的问题哈?

guoying_ 2010-11-13 10:58:33
public class Test_1 {
public static void main(String[] args){
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.print(s2);
System.out.println(s2 == "ab");
System.out.print(s3);
System.out.println(s3 == "ab");


}
}
运行结果是:
ab false
ab true
为什么比较后第一个是false,第二个是true啊?而且S2,S3都是“ab”啊?
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
智鹿软件 2010-11-13
  • 打赏
  • 举报
回复
要不你重写Object类的这两个方法,要不你理解会用即可
智鹿软件 2010-11-13
  • 打赏
  • 举报
回复
lz看一哈Object类的hashCode方法和 equals方法
智鹿软件 2010-11-13
  • 打赏
  • 举报
回复
==比较的是内存地址,两个对象的属性一致,但内存地址是不一样的
String s1=new String("abc");
String s2=new String("abc");
if(s1==s2){
System.out.println("ok");
}else{
System.out.println("no");
}

s1在栈区,指向一个堆区的对象,"abc"在常量池
建议lz好好看一下Object类的所有方法。
sh7712623 2010-11-13
  • 打赏
  • 举报
回复
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
我觉得 S2 = S1+"b" 是用了S1的引用和 b进行连接了而引用也是一个Object所以S2显示出来的是ab但是它是一个a的引用和b 连起来的一个字符串

而 s3 ="a"+"b" 是字符串相加所以 生成的S3对象也就是ab

==是判断对象是否相等 所以第一个false 第二个true
而equles 就是 ==
public boolean equls(object o){
this==o;
retrun true;
}
houjin_cn 2010-11-13
  • 打赏
  • 举报
回复
编译器会直接把 String s3 = "a" + "b"; 优化为 String s3 = "ab";
houjin_cn 2010-11-13
  • 打赏
  • 举报
回复
是同一个对象才会 ==
不是同一个对象,要比较值相等, 用 equals

62,614

社区成员

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

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