final String类与非最终String类的final方法

sgo*_*les 17 java string final immutability

我知道,java.lang.String出于安全性和性能相关的原因,该类被声明为final.

我不理解的是,使用所有最终变量和最终方法是否可以实现相同目的而不是声明最终类?

简而言之,下面两个代码片段之间有什么区别...例如

public class final String { .. } 
Run Code Online (Sandbox Code Playgroud)

V/S

// non final class
public class String {

// all final variables
private final char[] value;

// all final methods
public final String subString() { .. }
public final int length() { return value.length;}

// etc
}
Run Code Online (Sandbox Code Playgroud)

EDITS

简单来说,我可以通过采用任何一种方法达到相同的不变性水平吗?它们是否都能使对象变得不可变?

Ada*_*ion 15

最后的课程不能延长.

可以扩展具有final方法的非final类(可以在子类中添加新方法),但不能覆盖现有的final方法.


tre*_*eno 7

类的final-modifier并不意味着属性也是final和immutable.它只是意味着该类不再是父类.最终的课程是不可能的.

请参阅在Java中使用final类