相关疑难解决方法(0)

为什么我要在Java中的方法参数上使用关键字"final"?

我不明白其中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;
}
Run Code Online (Sandbox Code Playgroud)

java final pass-by-reference pass-by-value

367
推荐指数
8
解决办法
14万
查看次数

标签 统计

final ×1

java ×1

pass-by-reference ×1

pass-by-value ×1