字符串和整数的评估顺序

Evaluation Order with string and ints

  String s1 = "six" + 3 + 3;
  String s2 = 3 + 3 + "six:";
  System.out.println(s1);
  System.out.print(s2);

输出:

  six33
  6six:

为什么第一个不加3+3,第二个加3?

操作顺序很重要

在第一个中,串联的工作方式如下:

String s1 = "six" + 3 + 3;
            "six3" + 3  // string plus int return string
            "six33"     // string plus int return string

在第二个中:

String s2 = 3 + 3 + "six:";
            6 + "six"  // int plus int return int
            "6six"     // int plus string return string

有关详细信息,请阅读 Operators and 15.7. Evaluation Order

的文档

All binary operators except for the assignment operators are evaluated from left to right; assignment operators are evaluated right to left.

在S1中,编译器读取(六个)字符,然后读取并读取。数字3的数值不能和文本(六)相加,作为一个字符加在x后面,然后读3加在第3个后面

在s2中他读到3然后3可以执行编译器收集到的过程直接打印6然后读到(6)不能收集到数字6后打印

顺序很重要。在第二种情况下,它首先进行算术运算和字符串连接,因此结果为 6six