各位大佬,最近關(guān)于string的問(wèn)題始終沒有想明白,希望有大神能夠指點(diǎn)。這里有幾個(gè)問(wèn)題:1、 String a = "a";
a.concat("b");
System.out.println(a); //輸出:a
a = "b";
System.out.println(a); //輸出:b
a = new String("c");
System.out.println(a); //輸出:cstring源碼里是final修飾的類,我看到源碼中concat方法是返回一個(gè)新字符串對(duì)象,知道第一個(gè)輸出是a,但是后面為什么還是可以直接賦值或者new對(duì)象?2、上面那種重新賦值得到的a究竟是引用變了,指向了新的字符串,還是改變了原來(lái)的字符串內(nèi)容?3、為什么重新用final修飾以后, final String a = "a";
a = "b"; //編譯通過(guò)
a = new String("c"); //編譯錯(cuò)誤string類的final和這里的fianl究竟是怎么回事呢?4、為什么源碼里final修飾的char[]也可以直接賦值?public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
4 回答

慕標(biāo)琳琳
TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
類的final是不能被繼承
屬性上的final是引用的對(duì)象不能變,但是里面的值可以變
1.concat()是新建了一個(gè)String,把兩個(gè)字符串拼起來(lái),a還是沒變,而后面兩種都是改變了引用
2.改變了引用,String對(duì)象不可變
3.兩種賦值都是不允許的,final屬性不可以賦值
4.源碼的value[]這個(gè)變量的引用不可變,但是這個(gè)數(shù)組里的內(nèi)容可以變

紅糖糍粑
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
String這個(gè)類是Final修飾的,表示該類不可被繼承重寫。屬性用final修飾表示該屬性為常量,不可修改內(nèi)容
添加回答
舉報(bào)
0/150
提交
取消