【问题标题】:Concatention of string with boolean in java [duplicate]java中字符串与布尔值的连接[重复]
【发布时间】:2019-08-24 16:46:33
【问题描述】:

谁能解释一下为什么第 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);
        }
    }

【问题讨论】:

  • 第一次做"Hello all" + s1,第二次做==操作
  • 几分钟前不是有人问过这个问题吗?

标签: java string concatenation


【解决方案1】:

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

【讨论】:

【解决方案2】:

第五行代码打印表达式的求值

"Hello all" + s1==s2

这是

("Hello all" + s1) == s2

这是

("Hello all" + "Hello") == "Hello all"

这是

false

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2013-10-16
    • 2015-11-15
    相关资源
    最近更新 更多