Java“final”关键字是否真的提高了安全性?

2022-09-02 02:15:44

虽然在Java中使用“final”关键字有很多原因,但我一遍又一遍地听到的一个原因是它使您的代码更安全。虽然在这个微不足道的情况下,这似乎是有道理的:

public class Password
{
    public final String passwordHash;
    ...
}

使用最终关键字,您会期望没有恶意代码能够更改变量 passwordHash。但是,使用反射可以更改 passwordHash 字段上的最终修饰符。

那么,“最终”是否提供了任何真正的安全感,或者它只是安慰剂?

编辑:有一些非常有趣的讨论,我希望我能接受不止一个答案。谢谢大家的投入。


答案 1

它不是“抵御攻击”意义上的“安全”;这更像是“更难被错误搞砸”。

我更喜欢“安全”这个词,因为我觉得它更像是防止事故,而不是恶意。


答案 2

Java的关键字不用于这种安全性。它不能替代通常需要加密解决方案的东西。final

在这些类型的讨论中,“安全性”通常是指安全对象模型的概念 - 也就是说,消费者不能出于类的原始作者无意的目的而操纵对象模型。