Java 为什么在使用布尔语句时未在system.out.println语句中打印内容

Java 为什么在使用布尔语句时未在system.out.println语句中打印内容,java,string,system.out,Java,String,System.out,数据未显示在system.out.println语句中 用括号表示它是有效的,等于方法 final String s1="all men are created equal:27"; final String s2="all men are created equal:"+s1.length(); System.out.println("all men are created equal:" + (s1==s2)); 输出:人人生而平等:错误 final String s1="all men

数据未显示在system.out.println语句中

用括号表示它是有效的,等于方法

final String s1="all men are created equal:27";
final String s2="all men are created equal:"+s1.length();
System.out.println("all men are created equal:" + (s1==s2));
输出:人人生而平等:错误

final String s1="all men are created equal:27";
final String s2="all men are created equal:"+s1.length();
System.out.println("all men are created equal:" + (s1.equalsIgnoreCase(s2)));
System.out.println();
final String s1="all men are created equal:27";
final String s2="all men are created equal:"+s1.length();
System.out.println("all men are created equal:" + s1==s2);
System.out.println();
输出:人人生而平等:错误

final String s1="all men are created equal:27";
final String s2="all men are created equal:"+s1.length();
System.out.println("all men are created equal:" + (s1.equalsIgnoreCase(s2)));
System.out.println();
final String s1="all men are created equal:27";
final String s2="all men are created equal:"+s1.length();
System.out.println("all men are created equal:" + s1==s2);
System.out.println();
输出:false


为什么“人人生而平等:”不是打印呢?

由于java中的运算符优先级,最后一次打印只显示false。首先,它用字符串s1表示“人人生而平等”。然后比较concated字符串是否等于s2并打印输出。正如你所看到的,凝聚字符串并不等于s2。

仅仅因为所有的人生来都是平等的:“+s1和
s2
是不平等的

通过上面的表达式,您可以检查是否所有人都是平等的:“+s1和
s2
是否平等。因为所有的人生来都是平等的:“+s1和
s2
是不平等的,结果将是
false

如果要获得预期的行为,应该在
s1==s2
周围使用括号

"all men are created equal:" + (s1==s2)
将“()”添加到s1==s2。 像这样:

System.out.println("all men are created equal:" + (s1==s2));
原因如下:

"all men are created equal:" + s1 => "all men are created equal:false"
"all men are created equal:false" == s2 => false
PRINT false

您使用的运算符有不同的先例。
=
运算符的优先级低于
+
运算符(就像数学中
+
的优先级低于
*
一样),因此表达式

"all men are created equal:" + s1==s2
以这种方式进行分析:

("all men are created equal:" + s1) == s2
它正在比较是否所有的人都是生而平等的:“+s1等于
s2
。此表达式的结果是一个
布尔值
。因此,只打印
false

通过添加括号,可以清楚地表明您希望先计算
s1==s2
部分,然后计算
+
运算符。这就像
1+2*3
(1+2)*3
不同

还要注意的是,您应该将字符串与
相等,而不是
=
进行比较:

"all men are created equal:" + s1.equals(s2)
运算符的优先级非常高,高于
+
,因此在本例中不需要括号