相关疑难解决方法(0)

为什么String类是不可变的,即使它有一个名为"hash"的非最终字段

我正在阅读Joshua Bloch撰写的有效Java第15项.在第15项中谈到"最小化可变性"时,他提到了使对象不可变的五条规则.其中之一就是让所有领域都是最终的.这是规则:

使所有字段成为最终字段:这清楚地以系统强制执行的方式表达您的意图.此外,如果对新创建的实例的引用在没有同步的情况下从一个线程传递到另一个线程,则必须确保正确的行为,如内存模型中所述[JLS,17.5; Goetz06 16].

我知道String类是一个不可变类的例子.通过源代码我看到它实际上有一个非最终的哈希实例.

//Cache the hash code for the string
private int hash; // Default to 0
Run Code Online (Sandbox Code Playgroud)

String如何成为不可变的呢?

java string immutability

21
推荐指数
2
解决办法
2850
查看次数

什么时候使用空白的最终变量?

我正在查看关于最终变量的另一个问题,并注意到你可以声明最终变量而不初始化它们(一个空白的最终变量).有没有理由这样做,什么时候有利?

java final

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×2

final ×1

immutability ×1

string ×1