基础题求解,JAVA字符串比较的一个问题

starlihgt36 2010-12-30 04:32:14
直接上代码,求解释,俩比较运算结果为何不一样


String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // 输出: true
String s3 = new String("Hello");
String s4 = new String("Hello");
System.out.println(s3 == s4); // 输出: false
...全文
131 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsea08 2010-12-30
  • 打赏
  • 举报
回复
"==":基本类型的比较和对象的引用的比较
qichao88888 2010-12-30
  • 打赏
  • 举报
回复
可以翻翻以前的帖子。
creasure 2010-12-30
  • 打赏
  • 举报
回复
学习了。所以比较对象一定要用equals
jiutianfeiwu 2010-12-30
  • 打赏
  • 举报
回复
s1 s2 元字符
quifar123 2010-12-30
  • 打赏
  • 举报
回复
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1==s2); // 输出: true
String s3 = new String("Hello");
String s4 = new String("Hello");
System.out.println(s3.equals(s4)); // 输出:true
这样就都是true咯
  • 打赏
  • 举报
回复
收教。。。。。
茫茫大海 2010-12-30
  • 打赏
  • 举报
回复
看看String的intern方法就明白s1==s2为true了。我上面贴出来了API中该方法的说明!
s3和s4是两个对象的引用,所以s3==s4为false。
Jlins 2010-12-30
  • 打赏
  • 举报
回复
String s1 = "Hello";
String s2 = "Hello";
s1 s2指向的是一个"Hello",在常量池中,相同串只存在一个


String s3 = new String("Hello");
String s4 = new String("Hello");
创建的是2个对象,对象的地址不同

ethan_z 2010-12-30
  • 打赏
  • 举报
回复

[Quote=引用 2 楼 hudie1234567 的回复:]

经久不衰的问题啊!字符串常量池啊!
[/Quote]
+1;
茫茫大海 2010-12-30
  • 打赏
  • 举报
回复
intern
public String intern()返回字符串对象的规范化表示形式。
一个初始为空的字符串池,它由类 String 私有地维护。

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。

它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。字符串字面值在 Java Language Specification 的 §3.10.5 定义。


返回:
一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
totaka 2010-12-30
  • 打赏
  • 举报
回复
"Hello"存在栈里,new String("Hello")堆里生成字符串对象其值指向栈中的"Hello"
茫茫大海 2010-12-30
  • 打赏
  • 举报
回复
经久不衰的问题啊!字符串常量池啊!
sydongda 2010-12-30
  • 打赏
  • 举报
回复
查看String的doc文档,里面有答案

62,614

社区成员

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

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