我见过很多人打来电话,例如:
final String foo = "foo";
“最终变量”。
但是,我完全不同意。当Java中的一种数据具有final修饰符时,我立即将其称为“ Constant”。变量不能是常数(完全不合逻辑)。
我错了吗?
我见过很多人打来电话,例如:
final String foo = "foo";
“最终变量”。
但是,我完全不同意。当Java中的一种数据具有final修饰符时,我立即将其称为“ Constant”。变量不能是常数(完全不合逻辑)。
我错了吗?
虽然在行业中我们都倾向于混合使用名称,但是通常来说,“最终变量”和“常量”之间的区别在于,“常量”在编译时是已知的,而最终变量却不是。
看看这个例子:
@Test
public void testMe() {
class A {
final String foo;
A(int i) {
foo = (i > 10) ? "foo" : "bar";
}
void print() {
System.out.println(foo);
}
}
A a1 = new A(20);
A a2 = new A(5);
a1.print();
a2.print();
}
此代码编译并产生以下输出:
foo
bar
所以这就是为什么从技术上讲它可以称为最终变量的原因。
即使您立即分配值:
final String foo2 = "foo2";
写这样的东西在技术上是可能的(我承认完全是作弊的):
final String foo2 = SOME_VAR > 5 ? "foo2" : "bar2";