final修飾的Map集合可以被修改

2021-10-05 23:16:49 字數 687 閱讀 7522

例:

final string s = 「aaa」;

final map map = new hashmap()

s = "bbb";

map.put("aa","111");

結果是s報錯,map成功執行。

fianl的特性是:

final修飾的類不能被繼承;

final就是的方法不能被重寫,可以被過載。

final修飾的變數不可修改。

到這裡是沒有毛病的,但是為什麼map就可以修改呢?

這裡我在網上查閱了一些部落格,資料說的是final修飾的變數不可被修改說的是引用不可被修改。

像string型別的變數本身的值是不可變得。修改string變數的值就是修改引用,直接執行另乙個記憶體位址了。即改變了引用,和final衝突。

而map集合就不一樣了,map集合進行內容操作時,只是在記憶體中修改值,並沒有重新指向新的位址,所以使用fianl修飾就算對map進行操作也沒有報錯。

ps:重寫和過載的區別

1.重寫必百須繼承,過載不用。

2.重寫的方法名,引數數目相同,引數型別兼度容,過載的方法名相同,引數列表不同

3.重寫的知方法修飾道符大於等於父類的方法,過載內和修飾符無關。

4.重寫不可以丟擲父類沒有丟擲的一般異常容,可以丟擲執行時異常

final修飾變數 與Stastic修飾的變數

一 final修飾變數 final可以修飾成員變數,也可以修飾區域性變數 形參。final變數一旦獲得初始值之後,final的變數就不能被重新賦值。成員變數是隨類初始化或物件初始化而初始化的,當執行靜態初始化塊時候可以對類屬性進行賦初始值,當執行普通初始化塊或者構造器的時候可以對例項屬性賦初始值。因...

可以修飾類的修飾符

外部類只能被public 預設訪問許可權 即default abstract final修飾,不能被private和protect修飾。原因 成員內部類和靜態內部類可以被public 預設訪問許可權 即default private protect abstract final修飾。這些修飾符只能修...

JAVA中的final修飾符

final 最終。作為修飾符 1 可以修飾類,變數,函式 2 被final修飾的類不可以被繼承,為了避免被繼承,被子類複寫功能 3 被final修飾的方法不可以複寫 4 被final修飾的變數是乙個常量,只能賦值一次,既可以修飾成員變數,也可以修飾區域性變數 當在描述事物時,一些資料的出現值是固定的...