1 主要是為了“效率” 和 “安全性” 的緣故。若 String允許被繼承, 由於它的高度被使用率, 可能會降低程序的性能,所以String被定義成final。
2、不允許其他類繼承。這個應該不是最終原因,但這里權且也當成是一個原因。
3、 String類中的成員屬性也幾乎都設計成了private final的,這樣String就被設計成一個不變類,這樣有助於共享,提高性能。可以將字符串對象保存在字符串常量池中以供與字面值相同字符串對象共 享。如果String對象是可變的,那就不能這樣共享,因為一旦對某一個String類型變量引用的對象值改變,將同時改變一起共享字符串對象的其他 String類型變量所引用的對象的值。
4、String被設計為不變類,其中的offset,value[]都被設計成private final的,這樣在多線程時,對String對象的訪問是可以保證安全的。java程序語言的許多特性依賴於不可變的String對象。
其他 包括Integer Long Character 被設計成final的原因類似