AI面试总结:int和Integer的区别
前言 在Java面试中,int和Integer之前的区别是经...
面试中也经常问到对象序列化,也就Android、Java黄总常见的Serializable和Parcelable,下面简单记录一下,方便自己查和学习。
Java的标准接口,也比较简单。
public class User implements Serializable { private static final long serialVersionUID = 1L; String name; int age; }
反射自动处理字段
可指定serialVersionUID
性能一般,因为使用了反射和IO流操作,会产生较多的临时对象,会引起频繁GC
持久化到文件
网络传输
Android的专属接口。
比较复杂,需要自己实现序列化和反序列化方法
public class User implements Parcelable { String name; int age; protected User(Parcel in) { name = in.readString(); age = in.readInt(); } public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in); } @Override public User[] newArray(int size) { return new User[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } }
显式定义如何写 / 读字段
必须提供 CREATOR
Android专门为内存传输设计
不依赖反射,直接操作 Parcel
Android官方推荐:组件间传递对象优先用Parcelable
Intent、Bundle传对象
startActivity()、Broadcast、Fragment等args传输
同设备、进程 / Binder 通信
Parcelable不是为长期存储或网络传输设计,不同Android 版本 Parcel格式可能变
Serializable:Java 通用、简单、慢,适合存储/网络
Parcelable:Android 专用、手写(或注解)、快,组件间传值首选
| 维度 | Serializable | Parcelable |
|---|---|---|
| 所属 | Java 标准 | Android |
| 实现成本 | 低 | 较高(可借助插件) |
| 性能 | 较低 | 高 |
| 反射 | 有 | 无 |
| 跨平台 | ✅ | ❌ |
| 长期存储 | ✅ | ❌ |
现在可用 Android Studio 插件 / Kotlin @Parcelize大幅简化 Parcelable