System.out.println(number1 +“score”+(number1 + number2)+ number1)结果说明(字符串与数字加法运算符)

时间:2013-11-19 08:03:44

标签: java

public class Test {
    public static void main(String[] args) {
        int number1 = 4;
        int number2 = 5;
        System.out.println( number1 + "Score:" + (number1 + number2) + number1 );
    }
}

以上的输出是:

4Score: 94

这是为什么?如果那里没有“得分”,我理解它的结果,但我不知道为什么。 number1和Score:首先单独输出,那么为什么它会影响结果为94?

5 个答案:

答案 0 :(得分:7)

你有:

public static void main(String[] args) {
    int number1 = 4;
    int number2 = 5;
    System.out.println( number1 + "Score:" + (number1 + number2) + number1);
}

这正是输出你告诉它输出的内容,基本上是:

"4" + "Score:" + "9" + "4"

+运算符与字符串一起使用时会将非String操作数转换为字符串并将字符串连接在一起。当+与所有数字操作数一起使用时,它是一个算术+,只是将这些值加在一起。

通过将(number1 + number2)括在括号中,可以首先对其进行求值,并且因为两个操作数都是整数,所以它的行为是算术+,它们将这两个数字相加(生成9)。然后将该结果转换为字符串并连接到其他所有内容。它本质上是一个捷径:

int number1 = 4;
int number2 = 5;
System.out.println( Integer.toString(number1) + 
                    "Score:" + 
                    Integer.toString(number1 + number2) + 
                    Integer.toString(number1) );

如果你删除“得分:”,那么操作数的所有都是整数,因此所有+运算符都是算术加法,它只是对所有数字求和 - 即:

的快捷方式
System.out.println( Integer.toString(number1 + (number1 + number2) + number1) );

如果您希望+运算符的更多技术细节与字符串与数字相关,请参阅Section 15.18 of the JLS(15.18.1描述了字符串的行为,15.18.2描述了数字类型的行为)。


顺便说一下,+运算符总是左关联的,无论操作数是什么类型(在15.18.1中描述)。因此,以下结果可能会让您感到惊讶:

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

剧透(鼠标悬停):

  

3string12

有关更多有用的示例,请参阅http://ideone.com/P11aMI

答案 1 :(得分:5)

这与运算符优先级和+运算符的重载有关。如果两个边都是数字,则+运算符执行加法:

number1 + number2

结果为9,首先进行评估(因为它在括号中)。

然后,由于其余部分具有相同的优先级,因此按从左到右的顺序重载到字符串连接。如果运算符的一个或所有参数不是数字,则它们都将被隐式转换为字符串。我们从:

开始
4 + "Score:" + (4 + 5) + 4

首先评估括号,然后我们得到:

4 + "Score:" + 9 + 4

哪个成为

"4Score:" + 9 + 4

然后

"4Score:9" + 4

你的最终结果将是

"4Score:94"

就像你得到的一样。

答案 2 :(得分:1)

子项number1 + number2被视为整数。因此可以计算总和:9。将其用作字符串参数会导致自动转换为字符串,因此使用字符串的串联:number1 +“Score:”+“9”+ number1

答案 3 :(得分:0)

System.out.println( number1 + "Score:" + (number1 + number2) + number1))

这会打印出以下值(括号中的值会产生算术总和:

4 + "Score:" + (4+5) + 4 

4Score:94

答案 4 :(得分:0)

System.out.println( number1 + "Score:" + (number1 + number2) + number1));

这将是一步一步的

1) System.out.println( 4 + "Score:" + 9 + 4));
2) System.out.println( "4Score:" + 9 + 4));
3) System.out.println( "4Score:9" + 4)); 

然后它将输出显示为

"4Score:94"