java中布尔型字符串的压缩

java中布尔型字符串的压缩,java,string,concatenation,Java,String,Concatenation,有人能解释一下为什么第五行代码只打印false而不是Hello all false吗。 谢谢 Java将最终表达式计算为“(Hello all”+s1)==s2,而不是您可能想要的“Hello all”+(s1==s2) 另外,从不将字符串s与=进行比较,始终使用s1.equals(s2)=检查这两个字符串在内存中是否占用相同的位置 添加括号,并更改为.equals(),它应该可以正常工作 编辑 正如Krystian所建议的,值得指出的是为什么在相等检查之后执行加法 每个操作符都有一个优先级,它

有人能解释一下为什么第五行代码只打印false而不是Hello all false吗。 谢谢


Java将最终表达式计算为
“(Hello all”+s1)==s2
,而不是您可能想要的
“Hello all”+(s1==s2)

另外,从不
字符串
s与
=
进行比较,始终使用
s1.equals(s2)
=
检查这两个字符串在内存中是否占用相同的位置

添加括号,并更改为
.equals()
,它应该可以正常工作

编辑

正如Krystian所建议的,值得指出的是为什么在相等检查之后执行加法

每个操作符都有一个优先级,它表示当操作顺序不明确时(即没有足够的括号来完整描述顺序时),操作符的优先级

例如,在计算表达式
1+2*3
时,该表达式被分组为
1+(2*3)
(在数学中也是如此),因为
*
的优先级高于
+

=
也是一个运算符,因此也具有优先级。它的优先级低于
+
,因此在
+
之后进行计算


下面的链接用一个所有运算符的先例表进行了更全面的解释:

第五行代码打印表达式的计算结果

"Hello all" + s1==s2
那是

("Hello all" + s1) == s2
("Hello all" + "Hello") == "Hello all"
false
那是

("Hello all" + s1) == s2
("Hello all" + "Hello") == "Hello all"
false
那是

("Hello all" + s1) == s2
("Hello all" + "Hello") == "Hello all"
false

首先执行
“Hello all”+s1
,第二次执行
==
操作几分钟前不是有人问过这个问题吗?如果能提到为什么
+
=
之前要进行评估,那也很好。这是因为运算符
+
的优先级高于运算符
=
。根据此表,是的,值得解释,我将编辑我的答案。