3

在下面的代码中,我将数据分配给最终对象。但没有得到编译错误。

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
}
4

2 回答 2

6

因为final适用于引用n,而不是引用的对象n

所以你不能这样做:

n = new Name("test");
于 2013-03-02T16:19:01.973 回答
5

来自Java 语言规范

一旦分配了最终变量,它总是包含相同的值。如果最终变量持有对对象的引用,则对象的状态可能会通过对对象的操作而改变,但变量将始终引用同一个对象。

所以可以操作指向的对象的状态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
}
于 2013-03-02T16:19:57.043 回答