为什么Wrapper Classes,String,... final?

Sum*_*mar 2 java oop

Core Java API中的许多类都是final(包装类,字符串,数学).为什么会这样?

das*_*ght 6

出于安全原因,它们是最终的.可能还有其他原因,但安全性是最重要的.

想象一下,能够继承java.lang.String并为安全敏感的API提供您自己的可变实现.API没有选择,只能接受你的字符串(记住替换原则),但你可以从它们下面(在并发线程上或在API返回后)更改字符串,即使它们已经检查了它有效.

基元的包装器也是如此:你不希望在任何情况下看到它们是可变的,因为它会违反关于使用这些类在API中编码的行为的重要假设.

String不让别人提供自己的,潜在的敌对,类如为根本,实现最终解决了这个问题String.