Java 为什么在使用布尔语句时未在system.out.println语句中打印内容
数据未显示在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
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)
运算符的优先级非常高,高于+
,因此在本例中不需要括号