转载

Java – 为什么以下代码打印出“BAC”而不是“ABC”?

请帮我理解这段代码.我是java的新手.
// C.java
class C { 
  public static void main(String arg[]) { 
    System.out.println("A"+new C()); 
  } 
  public String toString() { 
    System.out.print("B"); 
    return "C"; 
  } 
}
// output:
// BAC

您需要在这里理解2个概念:Java从左到右的评估规则和副作用.

"A"+new C()

遵循同样的规则.首先得到“A”,这是一个字符串文字,把它放在某个地方.然后它评估

new C()

它首先构造一个C Object,然后调用C Object的toString()方法,得到C对象的值,即“C”,然后将“A”和“C”连接在一起,然后打印“AC”.

在C Object的toString()方法中,有一个System.out.print(“B”);

当Java评估上面的表达式时调用它.它在评估完成之前打印出来.

这就是为什么首先打印“B”的原因

翻译自:https://stackoverflow.com/questions/6893625/java-why-the-following-code-print-out-bac-instead-of-abc

原文  https://codeday.me/bug/20190113/529659.html
正文到此结束
Loading...