有没有人知道这两种方法的不同之处?
public class SingleTone {
private static final instance = new SingleTone();
private SingleTone() {
}
public [static] SingleTone getinstance() {
return instance;
}
}
和
public class SingleTone {
private static instance = new SingleTone();
private SingleTone() {
}
public [static] SingleTone getinstance() {
return instance;
}
}
我知道最终的静态变量是线程安全的,但是我找不到非最终的变量。 (注意:我正在寻找最终静态变量与非最终静态变量的差异,所以请不要建议如何实现Singleton设计模式。我知道有一种Enum方法。)
编辑:我错过了方法上的静态关键字现在已经修复了!
答案 0 :(得分:2)
除了可能的编译器优化之外没有太大区别。在任何一种情况下,因为它是私有的没有setter,所以没有什么可以修改它,所以如果它是final
并不特别重要。但是,在这两种情况下,您的getInstance()
方法都需要声明static
。
答案 1 :(得分:1)
final
修饰符表示不会将任何其他内容分配给该字段。那就是你不能在它上面使用equals(=)运算符。虽然static
修饰符意味着变量是类的一部分而不是实例的一部分,所以无论你有多少个实例,它都只有一个。
第一种方法然后使引用线程安全,因为我们知道初始化后该值不会改变。但是,如果我们有最终结构,我们需要确保内容也是同步的。有关详细信息,请参阅this question。
答案 2 :(得分:0)
final不会对您的情况有任何特殊的性能提升。
我们使用final来进行清晰的设计方法。根据Josh Bloch的“继承设计或禁止它”的经验法则,对于一般的课程,应该更频繁地使用final,不仅仅是针对这种情况。