在java中String類為什麼要設計成final?

時間 2021-05-10 18:02:39

1樓:Seven0007

內聯這個說法是正確的,final修飾的類,其方法也都是final,在jvm中會被內聯到呼叫他的方法中。

final修飾的類說白了就是不想讓你extends繼承,不想讓你重寫裡面的方法,或者自定義一些方法。所以說String沒有子類,沒有子類!

2樓:神的選項卡

那不是final,是immutable,final是針對stack而言的,immutable其實更多的是heap裡面的不可變,之所以這麼設計,是因為string本身可以看成是類似於number, char一樣的符號

3樓:吳洋

String型別的變數初始化後不會再改變。即使你重新賦值的話,會在堆中重新開空間,而不是用原始的空間。所以final宣告可以避免後續操作用不必要的空間。

對於需要改變的,用StringBuilder就好

4樓:黃喜

String 之所以是final的是因為物件導向語言的特性: 類的多型,以及String被超級廣泛的使用所決定的。

假設String不是final修飾,而是可以繼承的。 設計乙個類MyString 繼承 String, 重寫length(),並返回0。

在需要用到String物件的地方,使用的是MyString 物件,因為 類的多型,不會出現任何編譯錯誤,但是後果 。。。。

String 又是如此廣泛的被使用,讓James Gosling把 String設計成非final的。。。 只怕他想都不敢想。。。

5樓:Gavin Wu

因為只有宣告成final ,JVM才不用對相關方法在虛函式表中查詢,而直接定位到string類的相關方法上,提高了執行效率。基礎類以保證執行效率為第一要素。

Java中關於String的問題?

超級大地 Q1jvm執行記憶體分為五個部分,那字串常量池屬於哪個部分的?是屬於堆的一部分還是單獨的一部分記憶體區域?字串常量池屬於方法區,準確的來說是方法區中的執行時常量池。方法區邏輯上是堆記憶體的一部分,例如我們常用的HotSpot虛擬機器就是將方法區劃為堆記憶體中的永久代,但是為了區分,主流還是...

Java求教!為什麼我用String類下的split方法拆分乙個字串時裡面的引數不能是File separator?

Mr.justin path.toString split Matcher.quoteReplacement File.separator BrandonYang 解決辦法如下,原因是符號 在regex裡面是轉義字元,而取file.separator在Windows環境下就是字串 String pa...

在類中定義普通的靜態資料成員會怎麼樣?為什麼?為什麼加上const就可以?

歐文韜 你把類宣告裡的 1去掉 然後類宣告的下面寫個 int Test data 1 就行了。加const可以是因為這是c 的特殊語法。數值型別的 static const 會被優化為字面值的常量 淺倉南家的達也醬 const static constexpr static是乙個特例,並且這個特例對...