我试图理解字符串连接与字符串比较的输出。需要明确的是,我有一个类使用 == 和 equals 来比较两个字符串。我试图将 == 和 equals() 的输出连接到一个字符串。 equals() 的输出是 concats,但是 == 的输出是does not连接。使用java的装箱功能,将布尔值与字符串连接起来。据我所知, equals 和 == 都返回布尔值。那么为什么会出现这种差异呢?谁能解释一下吗?
public class StringHandler {
public void compareStrings() {
String s1 = new String("jai");
String s2 = "jai";
String s3 = "jai";
System.out.println("Object and literal compare by double equal to :: "
+ s1 == s2);
System.out.println("Object and literal compare by equals :: "
+ s1.equals(s2));
System.out
.println("Literal comparing by double equal to :: " + s2 == s3);
System.out.println("Literal comparing by equals :: " + s2.equals(s3));
}
public static void main(String[] args) {
StringHandler sHandler = new StringHandler();
sHandler.compareStrings();
}
}
output
false
Object and literal compare by equals :: true
false
Literal compareing by equals :: true
更新:回答
如果 s1==s2 没有括号,JVM 会将字符串比较为“Object andliteral Compare by double equal to :: jai”==“jai”,结果为false。所以sysout中的实际内容没有被打印。添加括号后,JVM 会将字符串比较为“jai”==“jai”,结果为
Object and literal compare by double equal to :: true
当你这样做时
System.out.println("Object and literal compare by double equal to :: "
+ s1 == s2);
你首先连接字符串"Object and literal compare by double equal to :: "
用字符串s1
,这将给出
"Object and literal compare by double equal to :: jai"
然后,您正在检查该字符串是否是同一个对象(相同的引用)s2
:
"Object and literal compare by double equal to :: jai" == "jai"
这将是false
(输出将是false
).
换句话说,这是因为运算符优先级。 “操作”运算符前置的一种方法是使用括号。首先解析括号内的运算:
System.out.println("Object and literal compare by double equal to :: " + (s1 == s2));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)