Java中静态最终瞬态的影响是什么?

时间:2016-01-29 11:55:09

标签: java static final transient

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

所以我有以下字段:

public static final transient String VERSION = "1.0";

每当我发现这些关键字时,我很想删除这些transient个关键字,因为我认为它不会用于任何目的。

在这种情况下使用transient与否之间的行为是否存在差异?

3 个答案:

答案 0 :(得分:8)

static字段隐式transient(在序列化static字段时,无论如何都会丢失其值)。所以确实,没有必要同时宣布两者。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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