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参照に適用されるためです。nn

したがって、これを行うことはできません:

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 に答える