2011-08-01 38 views

回答

6

您需要了解這裏的2個概念:Java的左到右的評價規則副作用

"A"+new C() 

遵循相同的規則。它首先得到「A」,這是一個字符串文字,把它放在某個地方。然後,它評估

new C() 

它構建一個C Object第一,然後調用C對象的toString()方法,並得到C對象,這是「C」的值,然後串接「A」和「C」在一起,並且println「AC」。

在C Object的toString()方法中,有一個System.out.print("B"); 在Java評估上述表達式時調用它。它在評估完成之前打印出來。
那就是爲什麼「B」打印首

+0

感謝您的回答:) – dennis

9

評估雲一樣的東西:

Call println("A" + new C()) 
Since new C() hasn't been computed yet, we need to compute it, so... 
Compute new C().toString() 
    Print "B" 
Print line with "A" + "C" 

正如你所看到的,打印語句的順序是「B」,「A」,「C 「

+0

感謝您的回答:) – dennis

2

因爲new C()被轉換爲字符串,而傳遞給println()。基本上,這裏發生了什麼:

1. Concatenate "A" with new C(): 
    a. Call String.valueOf(new C()): 
    i. print "B" 
    ii. return "C" 
    b. Concatenate "A" and "C" 
2. Pass "AC" to println 
3. Print "AC" 

據我所知(我不是100%確定)的字符串連接使用String#valueOf(Object)而不是直接調用Object#toString()。這就是爲什麼"foo" + null"foonull"而不是[throw a NullPointerException]

+0

感謝您的回答:) – dennis

+0

不客氣。 –

相關問題