SCJP 1.6版考題 041

出自 陳富國維基館
前往: 導覽搜尋
1. public class KungFu{
2.   public static void main(String[] args){
3.     Integer x = 400;
4.     Integer y = x;
5.     x++;
6.     StringBuilder sb1 = new StringBuilder("123");
7.     StringBuilder sb2 = sb1;
8.     sb1.append("5");
9.     System.out.println((x == y) + " " + (sb1 == sb2));
10. }
11.}

What is the result?
  A. true true
  B. false true
  C. true false
  D. false false
  E. Compilation fails.
  F. An exception is thrown at runtime.


解答


Ans: B

解說:

Integer x = 400; -> (auto boxing) Integer x = new Integer(400);
Integer y = x; -> (auto boxing) Integer y = new Integer (x); 
   //Integer的建構子要代入的是整數值,因此,x被unboxing成整數 ->   Integer (400)
x++ -> x.add(1);
x與y應看成二個整數變數,不是物件參考
String是不可變的字串物件

Ex.
  String s = “ABC”; s.concat(“D”);
  此時會產生一個新字串物件”ABCD”,只是,s還是指向舊的字串物件”ABC”
  StringBuilder和StringBuffer物件其內含的字串是可變的

Ex.
  StringBuilder s = new StringBuilder("ABC");
  s.append("D");
  s所指向的字串物件內容由”ABC”變為”ABCD”