有 Java 编程相关的问题?

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

java系统。出来同时使用字符串和int时的println行为

考虑下面的代码片段-

public class Student {

    public static void main(String args[]) {
        int a = 3;
        int b = 4;
        System.out.println(a + b +" ");
        System.out.println(a + b +" "+ a+b);
        System.out.println(""+ a+b);

    }
}

上述代码段的输出如下所示-

7
7 34
34

从输出中可以清楚地看到,如果我们首先在print语句中使用String,那么整数将被连接起来。但是,如果我们首先使用integer,则会添加并显示值

有人能解释一下为什么会有这种行为吗

我甚至试着在PrintStream类中查看println()方法的实现,但没有弄清楚


共 (3) 个答案

  1. # 1 楼答案

    它与println的实现无关。传递给println的表达式的值在执行println之前进行计算

    它从左到右求值。只要+的两个操作数都是数字,就会执行加法。一旦至少有一个操作数是String,将执行String串联

    System.out.println(a    +      b          +       " ");
                      // int + int      int + String
                      // addition,      concatenation 
    System.out.println(a    +      b    +    " "   +    a   +    b);
                      // int + int  int + String Str+Str  Str+Str
                      // addition,    concat,    concat,  concat
    System.out.println(""   +     a     +      b);
                      // String+int  String+int
                      // concat,      concat
    
  2. # 2 楼答案

    第一种情况:

    System.out.println(a + b +" ");
    

    按此顺序,a + b将首先作为int和求值,然后在添加空格时转换为字符串(这里的第二个+用于字符串连接)

    第二种情况:

    System.out.println(a + b +" "+ a+b);
    

    在这里,第一部分将是int-sum操作,然后在添加空间时转换为字符串(第二部分+用于字符串串联),其余部分将是字符串串联,因为左操作数已经是字符串

    第三种情况:

    System.out.println(""+ a+b);
    

    和第二个一样

    注意事项:

    为了改变这种行为,只需在string串联之前添加括号强制int

  3. # 3 楼答案

    实际上并不是println()实现导致了这种情况,这是处理Strings时处理+操作符的Java方法

    实际上,手术是从左到右处理的,因此:

    • 如果在操作^{} conversionstring位于int(或任何其他类型)之前,则使用^{} conversion,并且所有剩余的操作数都将被视为strings它只包含一个String串联操作
    • 如果操作中int排在第一位,它将被视为int,因此使用addition操作

    这就是为什么a + b +" "会给出7,因为String在操作的末尾,对于其他表达式a + b +" "+ a+b""+ a+b,如果变量在表达式中的ab后面,则变量ab将被视为strings

    有关更多详细信息,请查看String Concatenation Operator + in Java Specs