方法参数中的 final 关键字
我经常遇到如下所示的方法:
public void foo(final String a, final int[] b, final Object1 c){
}
如果在不传递最终参数的情况下调用此方法,会发生什么情况。即,稍后更改的Object1(因此未被声明为最终对象)可以很好地传递给此方法
我经常遇到如下所示的方法:
public void foo(final String a, final int[] b, final Object1 c){
}
如果在不传递最终参数的情况下调用此方法,会发生什么情况。即,稍后更改的Object1(因此未被声明为最终对象)可以很好地传递给此方法
Java 总是在将参数发送到方法之前复制参数。这意味着最终并不意味着调用代码有任何区别。这仅意味着在方法内部不能重新赋值变量。
请注意,如果您有最终对象,您仍然可以更改该对象的属性。这是因为 Java 中的对象实际上是指向对象的指针。并且只复制指针(并且在您的方法中将是最终的),而不是实际的对象。
在某些情况下,您需要将其声明为 final -- 否则将导致编译错误--,即将它们传递到匿名类中。基本示例:
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