java中布尔型字符串的压缩
有人能解释一下为什么第五行代码只打印false而不是Hello all false吗。 谢谢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所建议的,值得指出的是为什么在相等检查之后执行加法 每个操作符都有一个优先级,它
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
,第二次执行==
操作几分钟前不是有人问过这个问题吗?如果能提到为什么+
在=
之前要进行评估,那也很好。这是因为运算符+
的优先级高于运算符=
。根据此表,是的,值得解释,我将编辑我的答案。