核心Java API中的許多類都是final的(包裝類,字符串,數學)。 這是爲什麼?爲什麼包裝類,字符串...最後?
回答
您可能想要阻止其他程序員創建子類或重寫某些方法。對於這些情況,您使用最終的關鍵字。
字符串類是爲了不可變 - 字符串對象不能被他們的任何方法修改。由於java不強制執行此操作,所以班級設計師做到了。沒有人可以創建String的子類。
希望這回答你的問題。
它不應該;它解釋了什麼'final' *做了*,但不是解釋爲什麼*這些特定的類是'final'。 「偶爾的」 –
- 事實上,這應該是默認的! –
最終類,動態類加載和安全性之間是否存在任何概念.Plz解釋。 –
由於安全原因,它們是最終的。可能還有其他原因,但安全性是最重要的。
想象一下繼承java.lang.String
的能力,並將您自己的可變實現提供給安全敏感的API。 API將沒有選擇,只能採取你的字符串(記住替代原則),但是你可以改變它們下面的字符串(在併發線程上或在API返回之後),即使它們已經檢查它是有效。
同樣適用於基元的包裝:在任何情況下,您都不希望看到它們是可變的,因爲它違反了使用這些類編碼在API中的行爲的重要假設。
製作String
最後通過不讓其他人提供他們自己的,可能是敵對的類實現作爲最基本的String
來解決這個問題。
- 1. 爲什麼Python刪除字符串的最後一個字符?
- 2. 字符串是一個類爲什麼
- 3. 爲什麼非字母字符串不能包含換行符?
- 4. 爲什麼最後一行不在包裝中?
- 5. 爲什麼Java中有包裝類?
- 6. Java:爲什麼需要包裝類?
- 7. 爲什麼我們需要包裝類
- 8. 爲什麼JAX-WS需要包裝類?
- 9. Label.Text字符串中的最後一個字符被移動到字符串的前面,爲什麼?
- 10. 爲什麼java字符串處理函數GetChars返回字符串最後一個字符-1
- 11. 包裝字符串PHP
- 12. 包裝長字符串
- 13. JQuery.each將字符串文字轉換爲字符串。爲什麼?
- 14. 爲什麼sed匹配最小而不是最大字符串?
- 15. 寫入字符串流後,爲什麼解壓縮爲字符串會導致該字符串變爲虛假?
- 16. 爲什麼「包裝」關鍵字和.h?
- 17. 爲什麼盒裝整數值可以隱式轉換爲字符串類型?
- 18. 什麼是最大值可以作爲字符串輸入Integer.parseInt(字符串)
- 19. 爲什麼string.empty()在字符串包含值時計算爲true?
- 20. 爲什麼python F字符串插值的用法用引號包裝?
- 21. 爲什麼這個c#字符串包裝算法不起作用?
- 22. 在Swift中可選包裝,爲什麼Swift將「可選」添加到字符串
- 23. 爲什麼字符串被稱爲「字符串」?
- 24. python中字符串的最後位置是什麼?
- 25. 爲什麼okhttp3.Response類最後
- 26. 什麼是預打包字符流類?
- 27. 什麼RegEx字符串會查找字符串中最後(最右邊)的一組數字?
- 28. 爲什麼/何時爲C字符串包含終止'\ 0'字符?
- 29. 爲什麼我的untar不包含最後一個字節
- 30. 爲什麼字符串可以爲空?
問誰發明了這些軟件包。我的猜測是「只是因爲」,或者「所以JDK將保證與Strings和Wrapper類一起工作」(避免子類會改變行爲的問題)。 –
因爲他們不打算延期? – assylias
Duplicate:http://stackoverflow.com/questions/2068804/why-is-string-final-in-java – Mat