Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

transient 字段有什么作用和限制?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

transient 用来声明一个实例字段不参加 Java 默认对象序列化。它常用于缓存、可重新计算的数据或不应由默认机制保存的字段。它不是加密,也不保证任何序列化框架都忽略该字段;自定义序列化代码仍可能把它写出去。

讲清原理

使用默认 Serializable 机制时,非 transient 的实例状态通常会被序列化;static 字段属于类,本来就不属于默认的对象实例状态。反序列化后,被默认排除的 transient 字段通常恢复为其类型默认值,除非自定义逻辑重新赋值。

这条规则主要针对 Java 自带对象序列化。JSON、数据库映射等框架各有约定,必须查对应框架规则。仅加 transient 不能替代敏感信息保护、访问控制或输入过滤。

例子与易错点

class SessionData implements java.io.Serializable {
    String userId;
    transient String temporaryToken;
}

默认序列化会跳过 temporaryToken。若自行实现 writeObject 并把令牌显式写入流,transient 不会替你阻止它。对不可信数据还原对象时,还应考虑 Java 序列化本身的安全风险。

相关题:第 45 题、第 49 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。