为什么标记为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