上一篇
安卓开发数据类型
- 行业动态
- 2025-04-22
- 8
基本数据类型
安卓开发中,Java的基本数据类型是构建业务逻辑的基础,主要包括以下8种:
类型 | 占用字节 | 取值范围 | 示例 |
---|---|---|---|
byte | 1字节 | -128~127 | byte b = 100; |
short | 2字节 | -32,768~32,767 | short s = 200; |
int | 4字节 | -2^31~2^31-1 | int num = 1000; |
long | 8字节 | -2^63~2^63-1 | long l = 100L; |
float | 4字节 | ±1.4E-45~±3.4E+38 | float f = 3.14f; |
double | 8字节 | ±4.9E-324~±1.7E+308 | double d = 3.1415; |
char | 2字节 | 0~65,535(Unicode字符) | char c = 'A'; |
boolean | 未定义(通常1位) | true/false | boolean flag = true; |
注意:
int
是最常用的整数类型,除非数值超过其范围才考虑long
。float
和double
存在精度损失,double
精度更高。char
存储Unicode字符,可直接用于字符串操作。
包装类与泛型
包装类(Wrapper Class)
Java为每种基本类型提供了对应的包装类,用于需要对象的场景(如集合、反射):
基本类型 | 包装类 |
---|---|
int | Integer |
long | Long |
double | Double |
boolean | Boolean |
示例:
int a = 10; Integer b = a; // 自动装箱(Auto-Boxing) int c = b; // 自动拆箱(Un-Boxing)
注意:
- 包装类对象可以为
null
,而基本类型默认有初始值(如int
默认为0)。 - 频繁装箱/拆箱可能影响性能,需谨慎使用。
泛型(Generic)
泛型用于定义可复用的代码模板,常见于集合类:
泛型场景 | 示例 |
---|---|
列表 | List<String> 表示只能存字符串的列表 |
字典 | Map<Integer, User> 表示键为整数、值为User对象的映射 |
示例:
// 无泛型的旧写法(需强制类型转换) List list = new ArrayList(); list.add("Hello"); String str = (String) list.get(0); // 使用泛型后 List<String> list = new ArrayList<>(); list.add("Hello"); String str = list.get(0); // 无需强制转换
集合类
安卓开发中常用的集合类及其特点:
集合类型 | 特点 | 适用场景 |
---|---|---|
ArrayList | 动态数组,支持随机访问 | 频繁增删元素时性能较低,适合读取操作多的场景 |
LinkedList | 链表结构,增删效率高 | 需要频繁插入/删除元素的场景 |
HashMap | 键值对存储,基于哈希表 | 快速查找元素(O(1)时间复杂度) |
ArrayDeque | 双端队列,线程不安全 | 实现栈或队列数据结构 |
示例:
// ArrayList初始化 ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("A"); arrayList.add("B"); // HashMap初始化 HashMap<String, Integer> map = new HashMap<>(); map.put("Tom", 25); int age = map.get("Tom"); // 返回25
Android特有数据类型
Parcelable 与 Serializable
用于跨组件(如Activity间)传递复杂对象:
特性 | Parcelable | Serializable |
---|---|---|
性能 | 高(手动实现) | 低(依赖反射) |
用法 | 需实现 writeToParcel 方法 |
直接实现 Serializable 接口 |
兼容性 | 仅Android平台 | 跨平台通用 |
示例:
// Parcelable实现 public class User implements Parcelable { String name; int age; protected User(Parcel in) { name = in.readString(); age = in.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } 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]; } }; }
Bundle
用于Activity间传递简单数据或Parcelable对象:
// 传递数据 Intent intent = new Intent(MainActivity.this, SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("key", "value"); bundle.putParcelable("user", user); // 需实现Parcelable intent.putExtras(bundle); startActivity(intent); // 接收数据 Bundle extras = getIntent().getExtras(); String value = extras.getString("key"); User user = extras.getParcelable("user");
相关问题与解答
问题1:基本数据类型与包装类的区别是什么?
解答:
- 内存:基本类型直接存储值,包装类存储对象引用。
- 默认值:基本类型有默认值(如
int
默认0),包装类默认为null
。 - 用途:基本类型用于简单计算,包装类用于需要对象的场景(如集合、泛型)。
- 性能:频繁装箱/拆箱会增加性能开销。
问题2:为什么Android推荐使用Parcelable而不是Serializable?
解答:
- 性能:Parcelable通过手动编码/解码,避免了Serializable的反射机制,效率更高。
- 体积:Parcelable生成的代码更轻量,适合移动设备。
- 限制:Parcelable仅适用于Android平台,而Serializable可跨平台(如Java SE)。