我有两个版本的"初始化按需持有人成语":
上面的主要区别是第一个被宣布INSTANCE为私有,但第二个被宣布INSTANCE为公共.
请告诉我应该使用哪一个.
对不起,我没有发现在我的应用程序中使用private和public之间的区别:
public class Singleton {
private int x;
public int getX() {
return x;
}
private Singleton () {}
private static class LazyHolder {
//both private and public works
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我唯一要做的就是调用类似的东西Singleton.getInsance().getX(),因此两个版本都有效.因此,我想知道使用它们的情况.
这是MSDN的一些描述
错误消息程序数据库管理器不匹配; 请检查您的安装程序数据库文件(.pdb)是使用比编译时找到的更新版本的mspdb80.dll创建的.
此错误通常表示mspdbsrv.exe或mspdbcore.dll缺失或与mspdb80.dll具有不同的版本.确保在系统上安装了匹配版本的mspdbsrv.exe,mspdbcore.dll和mspdb80.dll.
我想知道什么是"程序数据库管理器"?和"mspdbsrv.exe,mspdbcore.dll和mspdb80.dll"的关系是什么?
在JDK 1.6中,Doug Lea final在该next领域之前使用.
static final class HashEntry<K,V> {
final K key;
final int hash;
volatile V value;
final HashEntry<K,V> next;
Run Code Online (Sandbox Code Playgroud)
而在JDK 1.7中,next字段前面是volatile.我还注意到在JDK 1.7中,该get方法采用getObjectVolatile读取value字段的方法,该字段具有易失性加载语义.
我不知道Doug Lea之前使用过什么final.如果正确性存在问题,那么如何volatile在JDK 1.7(也是JDK 1.8)中替换它?
编辑:
具体来说,我的问题是我们可以final用volatileJDK 1.6的实现代替吗?
java concurrency hashmap concurrenthashmap java.util.concurrent
StringBuilder sb = "asd";
Run Code Online (Sandbox Code Playgroud)
在Java中,这种说法显然是错误的.像eclipse这样的IDE会告诉你:
无法从String转换为StringBuilder
但是,操作员String可以初始化对象=.
我想知道一些与内存分配有关的原因.