java - java中字符串与 boolean 值的连接

标签 java string concatenation

<分区>

有人可以解释为什么第 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);
        }
    }

最佳答案

Java 将最终表达式计算为 "(Hello all"+ s1) ==s2,而不是 "Hello all"+ (s1==s2),因为你可能打算。

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

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

编辑

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

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

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

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

以下链接解释得更透彻,并附有所有运算符的优先级表:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

关于java - java中字符串与 boolean 值的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57639837/

相关文章:

c - 如何判断一个字符串是否是另一个字符串的旋转

c - strcat() 正在复制其第二个参数

java - 将变量连接到 R.raw.(VARIABLEHERE)

java - 无法读取 XMLFile,异常 : java. io.FileNotFoundException : C:\Temp\logger. dtd(系统找不到指定的文件)

java - for-each 和 for 循环

ruby-on-rails - 如何删除与数组的任何元素匹配的子字符串

python - 连接 pandas 数据框中的所有列

php - 将使用连接的函数添加到 HTML 表单会导致函数错误地显示在表单顶部

java - JAXB 问题 -- 类......在此上下文中,其任何父类(super class)均未知

java - 无法使用 Java 中的 Scanner 比较从 txt 文件读取的行