为什么我在这个简单的java代码中得到这个输出?

时间:2013-12-07 12:46:14

标签: java

为什么我将10 2030作为输出?我无法弄清楚它为什么不输出10 50

public class Testing1 {
  public static void main(String args[]) {
    int num1 = 10, num2 = 20, num3 = 30;

    System.out.println(num1 + " " + num2 + num3);

3 个答案:

答案 0 :(得分:5)

这是因为Java使用'precedence'来计算表达式。在这种情况下,它从左侧开始,并且它向右工作,因为操作都是+它们都具有相同的优先级,因此使用从左到右的顺序。在第一个“添加”中,添加一个数字和一个字符串。 Java假定'+'用于执行字符串连接,并且您得到结果"10 "。然后将其添加到20,并获得(字符串连接)结果"10 20". Finally you add the 30, again adding to a String, so you get the result“10 2030”`。

注意,如果您将操作顺序更改为:

System.out.println(num1+num2+" "+num3);

num1+num2将被视为数字,并会进行数字加法,得出最终结果:"30 30"

要获得正确的值,您可以通过使用括号(...)(其运算符优先级高于'+')来创建子表达式来更改评估顺序,并获得结果:

System.out.println(num1 + " " + (num2 + num3));

首先将num2 + num3评估为数值表达式,然后才将其作为字符串表达式的一部分合并。

答案 1 :(得分:0)

查找运算符优先级以及当不同类型的操作数

时+如何工作

答案 2 :(得分:0)

在java'+'中,运算符对不同的操作数的操作方式不同。

  1. 对于整数操作数,它作为整数运算
  2. 运行
  3. 对于字符串,它以串联方式运行。
  4. java表达式的评估基于优先级规则。在您的情况下,只有“+”运算符,因此评估是从左到右。

    对于整数和字符串操作数,java'+'运算符执行字符串连接。

    所以num1 +“”+ num2 + num3执行为

     (integer + String) + int + int
                (String + int)+ int
                      String  + int
    

    您可以通过使用括号强制(num2 + num3)的优先级来实现您想要的输出。