有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中连接值的奇怪方式

System.out.println("" + 1+1);
System.out.println(1+1 + "");

为什么第一行打印11而第二行打印2


共 (3) 个答案

  1. # 1 楼答案

    System.out.println("" + 1+1);
    

    该表达式的第一个元素是String,因此JVM使用重载版本的+,它将值连接在一起,而不是添加它们

    System.out.println(1+1 + "");
    

    此表达式的第一个元素是基元类型。因此,将使用+运算符的“原始”行为。它构建了一个primitves的总和。下一个+找到一个String作为表达式的一部分。因此,它再次使用重载的“版本”并连接这些值

    评估顺序也对结果负责

    例如,它还打印2

    System.out.println("" + (1 + 1));
    

    因为括号中的表达式首先求值

  2. # 2 楼答案

    表达式从左到右求值

    在第一个表达式中,“+1+1”被计算为一个字符串和两个整数的串联

    在第二个表达式中,第一个+位于两个整数之间,因此它被视为加法,并且加法的结果与空字符串连接。顺便说一句,System.out.println (1+1);将打印与System.out.println (1+1+"");相同的输出

  3. # 3 楼答案

    如果你理解这些规则,答案很容易理解

    • 使用多个+
    • 当+与and Integer和字符串一起使用时,结果将变成字符串
    • 当+与两个整数一起使用时,结果为整数

    以下

    System.out.println("" + 1 + 1);
    

    编译器将其理解为

    System.out.println(("" + 1) + 1); // "" + 1 becomes "1" (String)
    System.out.println("1" + 1);      // "1" + 1 becomes "11" (String)
    

    鉴于

    System.out.println(1 + 1 + "");
    

    编译器将其理解为

    System.out.println((1 + 1) + ""); // 1 + 1 becomes 2 (Integer)
    System.out.println((2) + "");     // 2 + "" becomes "2" (String)
    

    一些程序员使用“+”作为快捷方式,使结果成为字符串。例如,foo接受一个字符串,但x是一个int

    foo("" + x)
    

    这可以写得更清楚

    foo(String.valueOf(x))
    

    foo(Integer.toString(x))