1。編譯和運(yùn)行下面這段代碼的結(jié)果是什么?
Integer i= new Integer("10");
if (i.toString() == i.toString())
System.out.println("Equal");
else
System.out.println("Not Equal");
選項(xiàng):
- A. 編譯錯(cuò)誤
- B. 輸出“Equal”
- C. 輸出“Not Equal”
- D. 以上都不是
正確答案:
說(shuō)明:
toString()
方法返回等同于這個(gè) String
對(duì)象的 String
。它每次調(diào)用時(shí)創(chuàng)建一個(gè)新的對(duì)象。 ==
操作符比較兩個(gè)對(duì)象引用的位模式而不是實(shí)際的 String
內(nèi)容。因此比較返回 false
,執(zhí)行 else
語(yǔ)句,輸出“Not Equal”。
2。在下面代碼中,“insert code here”位置可以合法地插入哪個(gè)選項(xiàng)?
class Parent
{
public void print(int i)
{
}
}
public class Child extends Parent
{
public static void main(String argv[])
{
}
// insert code here
}
選項(xiàng):
- A. public void print(int i, byte b) throws Exception {}
- B. public void print(int i, long i) throws Exception {}
- C. public void print(long i) {}
- D. public void print(int i) throws Exception {}
- E. public int print(int i)
正確答案:
說(shuō)明:
選項(xiàng) D 不能編譯,因?yàn)樗噲D拋出一個(gè)在 Parent
類中沒(méi)有聲明的 checked 異常。選項(xiàng) E 將不能編譯,因?yàn)橹挥蟹祷仡愋筒幌嗤鴧?shù)列表和方法名是相同的。這對(duì)于覆蓋和重載都是不允許的。選項(xiàng) A、B 和 C 有不同的參數(shù)表,所以它們表示 重載 而不是 覆蓋 。因?yàn)樗鼈兛梢話伋鋈魏萎惓#运鼈兪呛戏ǖ摹?
3。編譯和運(yùn)行以下程序會(huì)有什么結(jié)果?
class Test
{
public static void main(String args[])
{
String s1 = "abc";
String s2 = "abc";
s1 += "xyz";
s2.concat("pqr");
s1.toUpperCase();
System.out.println(s1 + s2);
}
}
選項(xiàng):
- A. "abcxyzabc"
- B. "abcxyzabcpqr"
- C. "ABCXYZabcpqr"
- D. "ABCXYZabc"
- E. 代碼不能編譯
正確答案:
說(shuō)明:
這段代碼可以無(wú)錯(cuò)誤地編譯運(yùn)行,輸出“abcxyxabc”。在這段代碼中, s1
和 s2
最初指向同一個(gè) String
對(duì)象“abc”。當(dāng)“xyz”連接到 s1
上時(shí),就創(chuàng)建了一個(gè)新的 String
對(duì)象“abcxyz” ,并且 s1
指向它。注意 s2
仍然指向原來(lái)的 String
對(duì)象“abc”,它沒(méi)有改變。 concat()
和 toUpperCase()
方法沒(méi)有任何效果,因?yàn)樽鳛檫@些操作的結(jié)果創(chuàng)建的新 String
對(duì)象不擁有任何引用。所以最后 s1
包含“abcxyz”而 s2
包含“abc”,從而 A 為正確結(jié)果。