Given the definitions of the MyString class and the Test class:
package p1;
class MyString {
String msg;
MyString(String msg) {
this.msg = msg;
}
}
package p1;
public class Test {
public static void main(String[] args) {
System.out.println("Hello " + new StringBuilder("Java SE 8"));
System.out.println("Hello " + new MyString("Java SE 8"));
}
}
What is the result?
A.
Hello Java SE 8
Hello Java SE 8
Hello Java SE 8
B.
Hello java.lang.StringBuilder@<<hashcode1>>
Hello p1.MyString@<<hashcode2>>
Hello p1.MyString@<<hashcode2>>
C.
Hello Java SE 8
Hello p1.MyString@<<hashcode>>
Hello p1.MyString@<<hashcode>>
D.
Compilation fails at the Test class.
題解
運算子「+」若其中一個運算元為字串,那麼它將會做字串連接,否則為加法運算。任何的物件,都擁有「toString()」方法,可以轉成字串。預設的「toString()」方法於Object類別中,程式實作如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
由於MyString類別並未覆寫Object的「toString()」方法,因此會直接使用原本的程式實作。
所以這個題目的實際輸出為:
Hello Java SE 8
Hello p1.MyString@15db9742
Hello p1.MyString@15db9742
「15db9742」為雜湊值,在不同環境下可能有不一樣的結果。