编程语言
首页 > 编程语言> > 为什么标记为final的对象可以被修改并在Java中调用非final方法?

为什么标记为final的对象可以被修改并在Java中调用非final方法?

作者:互联网

我是Java的新手,我来自C背景.

我以为Java中的final就像C中的const一样工作,但我想不是.

在C中以const初始化的对象只能调用const方法,而不能更改对象中的字段.

但是在下面的代码中,我可以为pet赋值.即pet.id = new ObjectId(newPetId);.

private void addPet() {
    progressBar.setVisibility(View.VISIBLE);

    final Pet pet;

    try {
        // Locally add and save pet.
        pet = getPetFromUserInput();

    } catch (InvalidInputException e) {
        progressBar.setVisibility(View.GONE);
        return;
    }

    pet.id = new ObjectId(); // Modify field member directly.
    pet.updateName("MyPet"); // Call non-final method.
}

解决方法:

在评论中引用Erik的答案,我为C程序员找到了一个简单的解释.

宠物在Java中就像Pet * pet;在C中.

最后的宠物在Java中就像Pet * const pet;在C中,它使指针为const而不是值本身.

请注意,Java和C有细微的差别.

在C中,您必须在声明const变量时分配一个值,但是在Java中,它允许您稍后进行操作,但只能执行一次.

标签:final,immutability,java,android
来源: https://codeday.me/bug/20191119/2033005.html