在下面的代码中,我将数据分配给最终对象。但是没有得到编译错误。
class Name {
private String name;
public Name (String s) {
this.name = s;
}
public void setName(String s) {
this.name = s;
}
}
private void test (final Name n) {
n.setName("test");//here exception coming but not giving compile error
}
答案 0 :(得分:6)
因为final
适用于引用n
,而不是n
引用的对象。
所以你不能做到这一点:
n = new Name("test");
答案 1 :(得分:5)
来自Java Language Specification:
一旦指定了最终变量,它总是包含相同的值。 如果最终变量包含对象的引用,则对象的状态可能会被对象上的操作更改,但变量将始终引用同一对象。
因此可以操纵n
private void test(final Name n) {
n.setName("test");
}
但你不能让n
存储另一个对象
private void test(final Name n) {
n = new Name("test"); //Can't do this
}