当前位置:首页 > 行业动态 > 正文

安卓开发数据类型

基本数据类型

安卓开发中,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
  • floatdouble 存在精度损失,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)。