Final關鍵詞形參傳值

2021-09-27 01:23:02 字數 1325 閱讀 9073

【考題題幹】在下面程式標明的位置處插入哪條語句會導致編譯錯誤?

public class finaluse ;

final int n = ;

use(x, y, z, n); }

static void use(final int x, int y, final int z, int n) }

請考慮下面的選項:

a.x++

b.y++

c.y=x

d.z[0]++

e.n[0]++

f.z=n

【試題分析】宣告形參的時候可以在方法呼叫的引數呼叫之前加上關鍵字 final。 final 引數也可以叫

做空白最終變數,也可以當作常量。即在對其賦值之前(例如方法呼叫之前),該變數為空(為初始化),

賦值之後,在該變數的生存週期內只能呼叫再也不能改變變數的值。final 變數只可以被賦值一次。在方

法呼叫時,final 形式引數被賦予實際引數的值。在方法內部,不能對 final 引數進行重新賦值或者是修

改。在 use 方法中,x 是 final 型別的,因此 a 選項中 x++表示是可以改變 x 的值的,所以 a 會導致編

譯錯誤。y,n[0]是 int 變數,所以 y, n[0]值是可以變化的,因此插入 b 和 e 選項都會編譯通過的。c 選

項是把 x 的值賦給 y,改變是 y 的內容,不會改變 x 的值,所以插入 c 選項會編譯通過的。在 d 選項中,

由於 z 是個 int 型陣列,它是屬於復合型別,在進行值傳遞的時候,傳給形參的是位址值,而不是內容,

因此 final int z 就表示 z 陣列不能在指向其他的陣列物件,但是 z 陣列中的內容是可以改變的,因此 z

[0]++表示的是內容上的改變,所以是沒有錯誤的,可以編譯通過的。f 選項正好與 d 選項相反,同理,

f 就是錯誤的。

【參***】af

本習題參考**:

下面是個人對本題目的理解:

簡單舉例解說:

public class an

public static void method1(final int j)

**片.

public

classan;

final int[

] n =

;use

(x, y, z, n);}

static

void

use(final int x, int y, final int[

] z, int[

] n)

final關鍵詞的使用

1.final修飾變數的時候 表示這個變數的值不可變,只能在初始化的時候對它進行賦值 如果是類的成員變數也可以在建構函式中對它進行賦值 賦值以後變數的值不能改變。2.final修飾物件的引用 這個時候引用名的引用物件是不能夠改變的,但是物件中的內容是可以改變的。舉個例子 在上面的例子中,如果執行st...

函式傳值傳參

var obj function x 內部宣告的變數不會影響外面的obj物件 console.log obj.n 2 obj 傳入的是乙個指標 值 x是obj指標的副本,兩者都指向同乙個物件 console.log obj.n 3 例子二 var x 1 function a x a x conso...

C 引用方式傳參,傳值方式傳參( )

1 引用方式傳參 引用相當於是外部變數的別名,實際操作的就是該變數,即在函式內對該變數進行修改的話,在外部該變數也會相應被修改。外部變數的值也會被修改 void changeref int ref 2 傳值方式傳參 實際上是複製了乙個外部變數的副本進入函式中,在函式內操作的為該副本,對該變數的修改並...