final char value[]={'a','b','c'};
final char value2[] = {'g'};
value2 = value;
上面這個value和value2使用final修飾是不可變的,如果將value的地址賦值給value2所以會報錯,那么下面這段代碼為什么可以呢
-----------------------------------------------------
String a = "a";
a = "b";
System.out.println(a);
---------------------------------------------------
String的底層不是使用final修飾value了嗎,那么value這個地址不可變,那么上面為什么還成立呢
/*private final char value[];*/這個是String底層陣列實作方式(Java8)
uj5u.com熱心網友回復:
陣列變數宣告為final,即變數的參考目標不可變,但是參考目標中的各個元素的值可以修改。所以陣列value2和陣列value的參考目標都是不可以修改的,但是value[0]='f'則成立。變數a參考的字串內容沒有改變,依然是"a"
但是將"b"的參考賦給了a,那么a就可以對"b"參考了。
uj5u.com熱心網友回復:
其實我想問的意思是為什么這兩段代碼中的地址一個不可變一個可變;第一段是final修飾,第二段String的底層陣列實作也是final修飾
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275271.html
標籤:Java SE
上一篇:類繼承
