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. 以上都不是
正确答案:
说明:
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)
正确答案:
说明:
选项 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. 代码不能编译
正确答案:
说明:
这段代码可以无错误地编译运行,输出“abcxyxabc”。在这段代码中, s1
和 s2
最初指向同一个 String
对象“abc”。当“xyz”连接到 s1
上时,就创建了一个新的 String
对象“abcxyz” ,并且 s1
指向它。注意 s2
仍然指向原来的 String
对象“abc”,它没有改变。 concat()
和 toUpperCase()
方法没有任何效果,因为作为这些操作的结果创建的新 String
对象不拥有任何引用。所以最后 s1
包含“abcxyz”而 s2
包含“abc”,从而 A 为正确结果。