📜  Java中的加法和串联

📅  最后修改于: 2020-03-24 10:48:26             🧑  作者: Mango

尝试预测以下代码的输出:

public class Mangodoc
{
    public static void main(String[] args)
    {
        System.out.println(2+0+1+6+"芒果文档");
        System.out.println("芒果文档"+2+0+1+6);
        System.out.println(2+0+1+5+"芒果文档"+2+0+1+6);
        System.out.println(2+0+1+5+"芒果文档"+(2+0+1+6));
    }
}

输出:

9芒果文档
芒果文档2016
8芒果文档2016
8芒果文档9

此不可预测的输出是由于以下事实:如果运算符具有相同的优先级,则编译器会从左到右评估给定的表达式。一旦遇到字符串,它将字符串的其余部分视为字符串(同样基于表达式的优先顺序)。

  • System.out.println(2 + 0 + 1 + 6 +“ 芒果文档”);  //打印2、0、1和6的和,等于9
  • System.out.println(“ 芒果文档” + 2 + 0 + 1 + 6);  //它打印2,0,1和6的串联,这是2016,因为它最初遇到字符串。基本上,字符串优先,因为它们的转换优先级高于整数。
  • System.out.println(2 + 0 + 1 + 5 +“ 芒果文档” + 2 + 0 + 1 + 6);  //根据上面给出的示例,打印2,0,1和5的和,而2,0,1和6的串联。
  • System.out.println(2 + 0 + 1 + 5 +“ 芒果文档” +(2 + 0 + 1 + 6)); //由于()优先于+,它同时打印2,0,1和5以及2,0,1和6。因此,首先计算()中的表达式,然后进行进一步评估。