方法参数中的最终关键字

这个问题在这里已经有了答案:

  • 为什么我应该在Java的方法参数中使用关键字“final”? 12个答案

  • Java在将它们发送给方法之前总是制作一个参数的副本。 这意味着最终并不意味着调用代码的任何区别。 这只意味着在方法内变量不能被重新分配。 (注意,如果你有最终的对象,你仍然可以改变对象的属性)。


    有一种情况需要最终声明它 - 否则会导致编译错误 - 即将它们传递给匿名类。 基本示例:

    public FileFilter createFileExtensionFilter(final String extension) {
        FileFilter fileFilter = new FileFilter() {
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(extension);
            }
        };
    
        // What would happen when it's allowed to change extension here?
        // extension = "foo";
    
        return fileFilter;
    }
    

    删除final修饰符会导致编译错误,因为它不再保证该值是运行时常量。 改变匿名类外部的值会导致匿名类实例在创建之后表现不同。


    Java只是传值。 (或更好的 - 按值传递参考)

    所以传入的参数和方法中的参数是指向同一对象(值)的两个不同的处理程序。

    因此,如果您更改对象的状态,则会反映到引用它的每个其他变量。 但是如果你重新分配一个新的对象(值)给参数,那么指向这个对象(值)的其他变量就不会被重新赋值。

    链接地址: http://www.djcxy.com/p/20849.html

    上一篇: final keyword in method parameters

    下一篇: what's the point?