SCJP測試題
1。編譯和運行下面這段代碼的結果是什么?
Integer i= new Integer("10");
if (i.toString() == i.toString())
System.out.println("Equal");
else
System.out.println("Not Equal");
選項:
- A. 編譯錯誤
- B. 輸出“Equal”
- C. 輸出“Not Equal”
- D. 以上都不是
正確答案:
- C
說明:
toString()
方法返回等同于這個 String
對象的 String
。它每次調用時創建一個新的對象。 ==
操作符比較兩個對象引用的位模式而不是實際的 String
內容。因此比較返回 false
,執行 else
語句,輸出“Not Equal”。
2。在下面代碼中,“insert code here”位置可以合法地插入哪個選項?
class Parent
{
public void print(int i)
{
}
}
public class Child extends Parent
{
public static void main(String argv[])
{
}
// insert code here
}
選項:
- 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)
正確答案:
- A,B 和 C
說明:
選項 D 不能編譯,因為它試圖拋出一個在 Parent
類中沒有聲明的 checked 異常。選項 E 將不能編譯,因為只有返回類型不相同,而參數列表和方法名是相同的。這對于覆蓋和重載都是不允許的。選項 A、B 和 C 有不同的參數表,所以它們表示 重載 而不是 覆蓋 。因為它們可以拋出任何異常,所以它們是合法的。
3。編譯和運行以下程序會有什么結果?
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);
}
}
選項:
- A. "abcxyzabc"
- B. "abcxyzabcpqr"
- C. "ABCXYZabcpqr"
- D. "ABCXYZabc"
- E. 代碼不能編譯
正確答案:
- A
說明:
這段代碼可以無錯誤地編譯運行,輸出“abcxyxabc”。在這段代碼中, s1
和 s2
最初指向同一個 String
對象“abc”。當“xyz”連接到 s1
上時,就創建了一個新的 String
對象“abcxyz” ,并且 s1
指向它。注意 s2
仍然指向原來的 String
對象“abc”,它沒有改變。 concat()
和 toUpperCase()
方法沒有任何效果,因為作為這些操作的結果創建的新 String
對象不擁有任何引用。所以最后 s1
包含“abcxyz”而 s2
包含“abc”,從而 A 為正確結果。
posted on 2005-12-30 16:49 瘋流成性 閱讀(340) 評論(0) 編輯 收藏 所屬分類: j2se