Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将最终属性称为“是正确的”;变量";尽管是一个常数?_Java_Final - Fatal编程技术网

Java 将最终属性称为“是正确的”;变量";尽管是一个常数?

Java 将最终属性称为“是正确的”;变量";尽管是一个常数?,java,final,Java,Final,我见过很多人打电话,例如: final String foo = "foo"; “最终变量” 然而,我完全不同意。当Java中的数据类型具有最后一个修饰符时,我立即将其称为“常量”。变量不能是常量(完全不合逻辑) 我错了吗?虽然在行业中我们都使用混合名称,但一般来说,“final variable”和“constant”之间的区别在于“constant”在编译时已知,而final variable则不然 看看这个例子: @Test public void testMe() { cla

我见过很多人打电话,例如:

final String foo = "foo"; 
“最终变量”

然而,我完全不同意。当Java中的数据类型具有最后一个修饰符时,我立即将其称为“常量”。变量不能是常量(完全不合逻辑)


我错了吗?

虽然在行业中我们都使用混合名称,但一般来说,“final variable”和“constant”之间的区别在于“constant”在编译时已知,而final variable则不然

看看这个例子:

@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
时,它被认为是一个常量。
final
变量可以分配一次,这可以在构造函数中完成。这不能用
静态final
完成,因为它必须在加载类时准备好。为什么这很重要?您的“问题”可能来自这样一个事实,“变量”可能有多种定义。阅读“变量”并不一定意味着值必须改变。“变量”顾名思义,意味着可以改变的东西,一旦你给它设置了一个值,最终的引用就不能改变,所以称一个常量变量是毫无意义的。从技术上讲,你可能没有错,但坚持这样的区别可能被认为是迂腐的。即使你是对的,我也建议你继续前进,接受现状;这不是你自己可能改变的事情。
final String foo2 = SOME_VAR > 5 ? "foo2" : "bar2";