AP Comp Sci の模擬試験を受けていたところ、次の問題が見つかりました。
次の出力は何ですか:
System.out.println("1" + new Integer(2) + 3);
答えは
123,
が文字列にキャストされていないため、混乱しています。したがって、両方の部分が整数である場合new Integer(2)
、Javaコンパイラはステートメントが文字列連結であると信じるのはなぜですか?new Integer(2) + 3
加算は連想のままです。a + b + c == (a + b) + c
答えは操作の順序と同じくらい簡単です。つまり、ステートメントが左から右に評価されて読み取れるようになります。System.out.println("1" + new Integer(2).toString() + 3.toString());
まず、男が指摘するように、足し算は左結合です。
次に、"1" + 2 のオーバーロード解決は、文字列である左側のオペランドによって制御されます。これにより連結が強制され、結果は "12" になります。
ここで、"12" + 3 はまったく同じオーバーロード解決を通過し、"123" になります。