Java 为什么字符串是最终的?

Java 为什么字符串是最终的?,java,string,Java,String,可能重复: 我只是想知道为什么java.lang.String会成为final?是为了防止被继承吗?为什么?您不应该扩展string类。只需在其他一些处理字符串的类中编写自己的方法 原因是string类是一个稳定的类,不应该被篡改,因为您可能会重新定义一些对其他事务有未知副作用的方法。您不应该扩展string类。只需在其他一些处理字符串的类中编写自己的方法 原因是string类是一个稳定的类,不应该被篡改,因为您可能会重新定义一些对其他事务有未知副作用的方法。确实如此。这使得安全管理器和类加载

可能重复:


我只是想知道为什么
java.lang.String
会成为
final
?是为了防止被继承吗?为什么?

您不应该扩展string类。只需在其他一些处理字符串的类中编写自己的方法


原因是string类是一个稳定的类,不应该被篡改,因为您可能会重新定义一些对其他事务有未知副作用的方法。

您不应该扩展string类。只需在其他一些处理字符串的类中编写自己的方法


原因是string类是一个稳定的类,不应该被篡改,因为您可能会重新定义一些对其他事务有未知副作用的方法。

确实如此。这使得安全管理器和类加载器中的代码可以处理字符串类型,而不必担心它实际上是在处理恶意子类,而恶意子类是专门设计用来欺骗它允许恶意代码通过的。

的确如此。这使得安全管理器和类加载器中的代码可以处理字符串类型,而不必担心它实际上是在处理恶意子类,而恶意子类是专门设计用来欺骗它允许恶意代码通过的。

除了前面提到的安全方面之外,我怀疑表现是另一个重要原因。对于较旧的JVM,尤其是final类(其中所有方法都是final定义的),可以更轻松地动态内联代码。由于字符串是使用最频繁的对象之一,它会影响许多应用程序的总体性能,因此这被视为一个改进将产生巨大总体影响的领域。

除了前面提到的安全方面之外,我怀疑性能是另一个重要原因。对于较旧的JVM,尤其是final类(其中所有方法都是final定义的),可以更轻松地动态内联代码。而且,由于字符串是使用最频繁的对象之一,它会影响许多应用程序的总体性能,因此这被视为一个改进将产生重大总体影响的领域。

我认为问题是“为什么”,而不是什么…@StaxMan your right。。。我添加的不仅仅是no。但是如果这是原因,他们只能声明方法
final
,以防止被重写,而不是整个类。你怎么想?我想问题是关于“为什么”,而不是什么…@StaxMan你的权利。。。我添加的不仅仅是no。但是如果这是原因,他们只能声明方法
final
,以防止被重写,而不是整个类。你觉得呢?和