【问题标题】:concatenating string and numbers Java连接字符串和数字 Java
【发布时间】:2012-08-19 18:09:37
【问题描述】:

为什么在这些情况下输出不同?

int x=20,y=10;

System.out.println("printing: " + x + y); ==> 印刷:2010

System.out.println("printing: " + x * y); ==> 打印:200

为什么第一个输出不是 30?它与运算符优先级有关吗?就像第一个“打印”和 x 被连接,然后这个结果字符串和 y 被连接?我说的对吗?

【问题讨论】:

  • "printing:" + x 将其转换为字符串,然后 + y 只是字符串连接。其中 xy '' 首先执行,因此你会得到 200。
  • 以为你知道答案,却又想找乐子;)
  • @SenthilKumar 我不确定答案。

标签: java


【解决方案1】:

这是BODMAS 规则

我在下面显示了从高到低的优先顺序:

B  - Bracket 
O  - Power
DM - Division and Multiplication
AS - Addition and Substraction

这适用于 Left to Right 如果运算符具有相同的优先级

现在

System.out.println("printing: " + x + y);

"printing: " : 是一个字符串"

"+" :是 Java 中唯一将数字连接到字符串的重载运算符。 由于我们这里有 2 个“+”运算符,并且 x+y 落在 "printing:" + 之后,因为它已经发生了,它也将 x 和 y 视为字符串。

所以输出是 2010.

System.out.println("printing: " + x * y);

这里

"*":优先级高于+

所以它是x*y 首先 然后是printing: +

所以输出是 200

如果您想在第一种情况下输出 200,请这样做:

System.out.println("printing: "+ (x+y));

Bracket优先顺序高于Addition

【讨论】:

    【解决方案2】:

    基本数学告诉您,每次添加数字。

    所以首先计算"printing: " + x。因为它是string + int,所以结果是"printing: 20"。然后你添加y 所以"printing: 20" + y 等于"printing: 2010"

    在第二种情况下,乘法是优先的。所以首先计算x * y 并等于200。那么"printing: " + 200 等于"printing: 200"

    【讨论】:

      【解决方案3】:

      您观察到的结果肯定与运算符precedence 以及求值顺序 有关。在没有其他规则的情况下,即更高优先级的运算符,运算符按从左到右的顺序计算。

      在第一个表达式中,所有运算符具有相同的优先级,因为它们是相同的运算符:+,所以第一个运算被计算。由于涉及到String,所以是String拼接,结果是String;以下+类似。

      在第二个表达式中,其中一个运算符是*,其优先级高于+,因此首先计算。由于+,你得到了乘法的结果,一个整数,然后Stringint的串联。

      【讨论】:

        【解决方案4】:

        这将打印30:

        System.out.println("printing: " + (x + y))
        

        您需要括号来表示您希望的优先级。

        【讨论】:

        • 我知道!但这不是我的问题。
        • 它只需要实际阅读 Java 运算符优先规则。
        【解决方案5】:

        用于运算符优先级

        System.out.println("printing: " + x * y);
        

        这里 * 运算符的优先级高于 + 所以首先它计算 x * y

        System.out.println("printing: " + x + y);
        

        这里所有的操作符都是相同的,它将被视为字符串连接操作,因为那里有一个string 值。

        如果你在这个中加入括号 - System.out.println("printing: " + (x + y));

        然后括号 ( 运算符的优先级高于 + 所以首先它将计算 (x + y) 并打印 30

        check detail operator precedence order

        【讨论】:

          【解决方案6】:

          在第一个打印行中,首先在 String 和 int 之间应用 + 运算符,结果是一个 String,它再次与另一个 int 连接得到一个 String。

          在第二行中,操作的顺序是:首先是乘法,然后将结果 int 连接到 String。

          【讨论】:

            【解决方案7】:

            System.out.println("2*("+a"+"+b"*"+c")")

            如何打印这个

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-02
              • 2017-12-23
              • 2013-05-22
              • 1970-01-01
              • 2010-09-14
              • 1970-01-01
              • 2013-11-30
              • 1970-01-01
              相关资源
              最近更新 更多