【发布时间】:2009-10-14 20:17:48
【问题描述】:
我经常看到这种初始化实例变量的习语
public class Test{
private Long l = 1l;
private MyClass mc = new MyClass();
public Test(){}
...
}
但我更喜欢
public class Test{
private Long l;
private MyClass mc;
public Test(){
l = 1l;
mc = new MyClass();
}
...
}
考虑到这些是非最终变量,这两种方法在线程安全方面是等效的还是比另一种“更”正确?
【问题讨论】:
-
关于可读性;我希望您对 long 常量使用大写 L 或将其省略,因为编译器将值 1 提升为 long 没有问题。 (小写的 l 很容易与 1 混淆。)还要注意变体 1 中的语法错误:缺少标识符 mc :-)
-
是的,是的,确实缺少 mc,但幸运的是你明白了......但是我的编译器从不允许我做 Long l = 1;......如果你的确实让我知道你正在使用哪个 javac。
标签: java thread-safety