Java中static final transient的作用是什么?

What is the effect of static final transient in Java?

在我正在处理的代码库中,几乎所有声明为 static final String 的变量也被声明为 transient

所以我有这样的字段:

public static final transient String VERSION = "1.0";

每当我发现这些 transient 关键字时,我很想删除它们,因为我认为它没有任何用处。

在这种情况下使用或不使用 transient 在行为上有什么不同吗?

变量上的transient关键字将确保在序列化时变量不是序列化对象的一部分。如果您的 class 不是 serializable,也不是 JPA 实体(它使用 transient 关键字来避免在数据库中存储变量),删除它应该没问题。

一个static字段是隐含的transient(当序列化一个static字段时,它的值无论如何都会丢失)。所以确实,不需要同时声明两者。

static 成员与 class 而不是对象相关联,因此在反序列化时您将看到您传递的值,而不是使用 transient 时显示的默认值。 为了更好地理解,尝试在序列化之后更改变量的值,然后在反序列化时,您会看到序列化成员的值相同,但静态成员已更改。 根据 transient final,final 变量确实通过其值直接参与序列化,因此无需将 final 变量声明为 transient。