SCJP 1.6版考題 178

出自 陳富國維基館
前往: 導覽搜尋
Given:
1. public class Target{
2.   private int i = 0;
3.   public int addOne(){
4.     return ++i;
5.   }
6. }
And:
1. public class Client{
2.   public static void main(String[] args){
3.     System.out.println(new Target().addOne());
4.   }
5. }

Which change can you make to Target without affecting Client?
 A. Line 4 of class Target can be changed to return i++;
 B. Line 2 of class Target can be changed to private int i = 1;
 C. Line 3 of class Target can be changed to private int addOne(){
 D. Line 2 of class Target can be changed to private Integer i = 0;

解答


Ans: D

解說:

此題問那一個對Target進行改變而不影響Client? (Client不用跟著改) 

A 先i++再回傳值 改成 先回傳值再i++,二種方式的回傳值會差1,Client必須處理這個不同的值
B 將i的初值設為1,與原先的初值0不同,Client必須處理這個不同的初值
C addOne方法改成私有後,影響Client無法存取該方法
D Integer是int的包裝類別,在JDK 1.5之後,Java會對基本資料型態的int與int的包裝類別“自動地“進行基本資料的封箱(auto-boxing)
  與基本資料的包裝類別拆箱動作(auto-unboxing),所以換寫成Integer不會造成任何的影響。