gpt4 book ai didi

java - 为什么 stringbuffer 是最终的?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:23 26 4
gpt4 key购买 nike

字符串类是不可变的,其背后的原因之一是该类被声明为最终类,尽管还有其他原因。但为什么 StringBuffer 或 StringBuilder 是 final 而它们仍然是可变的呢?那么还有哪些其他因素决定 String 是不可变的呢?

最佳答案

StringBufferStringBuilder 主要用于单个方法中的字符串连接操作,使用它们的代码通常由编译器生成。因此被扩展不是典型的用例。

另一方面,final 允许在 JVM 中进行更好的优化,至少在过去是这样;今天的 HotSpot JVM 不需要它,但是,从来没有理由更改这些类的 final 声明。

请注意,为多态行为扩展 StringBuilder 和覆盖方法会有点毫无意义,因为在整个 JRE 中没有接受或返回 StringBuilder< 的 public 方法 实例(除了 StringBuilder 本身)。有AppendableCharSequence填补这一空白并提供更大的灵 active 。

可变性不变性 的概念与final 类的概念完全不同。它们仅取决于类提供的方法或操作类型。 String 没有允许修改其内容的方法,而 StringBufferStringBuilder 有这样的方法。声明一个不可变类 final 只是有助于禁止可能引入支持突变的方法的子类,但这不是硬性要求。

关于java - 为什么 stringbuffer 是最终的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29567647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com