2011-08-01 10 views

答えて

6

現在地2つの概念を理解する必要があります。

"A"+new C() 

同じルールに従います。最初に "A"を取得します。これは文字列リテラルで、どこかに置いてください。それがC Object最初の構築

new C() 

を評価し、その後、CオブジェクトのtoString()メソッドを呼び出し、そして「C」であるCオブジェクトの値を取得し、その後、一緒に「A」を連結し、「C」、およびprintln "AC"。

CオブジェクトのtoString()メソッドの内部には、System.out.print("B"); があり、Javaが上記の式を評価するときに呼び出されます。評価が完了する前に印刷されます。あなたが見ることができるように、print文の順序は、 "B"、 "A"、「Cである

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" が最初に

+0

お返事ありがとうございました:) – dennis

9

印刷されている理由の評価のようなものを移行する

+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%確信している)に直接Object#toString()を呼び出すのではなく、String#valueOf(Object)を使用しています。だから"foo" + null[throw a NullPointerException]ではなく"foonull"です。

+0

お返事ありがとうございました:) – dennis

+0

よろしくお願いします。 –

関連する問題