当在方法参数上使用final关键字时,我无法理解该关键字在哪里真正方便。 如果我们排除使用匿名类,可读性和意图声明,那么对我来说几乎毫无用处。 强制某些数据保持不变并不像看起来那样强大。 如果参数是原始参数,则它将无效,因为参数作为值传递给方法,并且在范围之外进行更改将无效。 如果我们通过引用传递参数,则引用本身就是局部变量,并且如果在方法内部更改了引用,则不会在方法范围之外产生任何影响。 考虑下面的简单测试示例。尽管该方法更改了给定给定值的参考值,但该测试通过了,但没有效果。 public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; }