首页 > 解决方案 > java中字符串与布尔值的连接

问题描述

有人可以解释为什么第 5 行代码只打印 false 而不是“Hello all false”。谢谢

    class Hello {
        public static void main(String[] args) {
           final String s1 = "Hello";
           final String s2 = "hello all" + s1.length();
           System.out.println("Hello all" + s1==s2);
        }
    }

标签: javastringconcatenation

解决方案


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

此外,永远不要Strings 与进行比较==,始终使用s1.equals(s2). ==检查两个字符串是否在内存中占据相同的位置。

添加括号,然后更改为.equals(),它应该按预期工作。

编辑

正如 Krystian 所建议的,值得指出在相等检查之后执行加法的原因。

每个运算符都有一个优先级,它表示运算符在运算顺序不明确时(即,当括号不足以完全描述顺序时)的优先级。

例如,在计算表达式时1 + 2 * 3,它被分组为1 + (2 * 3)(就像在数学中一样),因为*它的优先级高于+.

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

以下链接更彻底地解释了所有运算符的优先级:https ://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html


推荐阅读