先放一段String類的源碼

image.png
通過源碼可以發(fā)現(xiàn),String類有一個命名為value的char數(shù)組的成員變量,并且是final修飾的。
如果被final修飾的成員變量是基本類型,那么這個成員變量一旦被賦值就不能再改變。但數(shù)組并不是基本類型,而是引用類型,所以value即使被final修飾,它里面的元素依然是可以改變的。
之所以說String類是不可變的,是因為String類沒有對外提供修改value屬性的方法(如setter方法),我們無法在外部去改變value的內(nèi)容。
那String類是覺得不可變的嗎?也不是,其實可以通過反射去修改String類對象的值。代碼如下:

image.png
執(zhí)行結(jié)果:

image.png