直接上代码,求解释,俩比较运算结果为何不一样
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
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
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 定义。
返回:
一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
String s2 = "Hello";
s1 s2指向的是一个"Hello",在常量池中,相同串只存在一个
String s3 = new String("Hello");
String s4 = new String("Hello");
创建的是2个对象,对象的地址不同
s3和s4是两个对象的引用,所以s3==s4为false。
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咯