上一篇
安卓开发整形数据类型那些
- 行业动态
- 2025-04-21
- 2
安卓开发中的整形数据类型详解
Java基础整形类型
类型 | 字节数 | 取值范围 | 默认值 | 常见场景 |
---|---|---|---|---|
byte | 1 | -128 ~ 127 | 0 | 网络协议中的小数值传输 |
short | 2 | -32,768 ~ 32,767 | 0 | 音频采样数据处理 |
int | 4 | -231 ~ 231-1 | 0 | 通用计算、数组索引、资源ID |
long | 8 | -263 ~ 263-1 | 0 | 时间戳(毫秒级)、大数值计算 |
包装类与自动装箱
- 基本类型:直接存储数值(如
int a = 10;
) - 包装类:
Byte/Short/Integer/Long
,用于对象化操作 - 自动装箱:
int -> Integer
隐式转换(如Integer x = 10;
) - 手动拆箱:
Integer.intValue()
获取基础类型值
安卓特有场景应用
资源ID
- 类型:
int
(实际为系统分配的虚拟ID) - 示例:
R.drawable.icon
返回整型值 - 注意:不要直接用魔法值,必须通过
R
类访问
- 类型:
颜色值
- 类型:
int
(ARGB格式,实际使用24位) - 示例:
Color.parseColor("#FF5722")
返回-16711936
- 位运算:
0xFF << 24 | red << 16 | green << 8 | blue
- 类型:
时间戳
- 类型:
long
(System.currentTimeMillis()) - 范围:可表示1970年至今的毫秒数(约68年)
- 类型:
常见问题与解决方案
问题 | 解决方案 |
---|---|
整数溢出 | 使用long 处理超大值,或进行边界检查(如Math.addExact() ) |
装箱空指针 | 避免对null 包装类调用方法,使用Objects.requireNonNull() 防护 |
位运算优化 | 用位移代替乘除法(如1 << 3 代替8 ),注意符号位处理 |
相关问题与解答
Q1:为什么Android资源ID用int类型而不是long?
A:
资源ID本质是编译期生成的索引值,理论上int
的4字节范围(-2^31~2^31-1)已足够覆盖所有资源,实际使用中系统会将最高位设为1(保证为负数),避免与常规ID冲突,因此有效范围约为2^30(约10亿),远超普通应用需求。
Q2:在Android中如何选择使用int还是long?
A:
- 优先使用
int
:内存占用少,适用于计数器、循环索引、常规数值计算 - 必须用
long
的场景:- 时间戳(毫秒级)
- 文件偏移量超过2GB
- 需要精确存储超过21亿的数值(如某些加密算法)
- 与后端API交互时遵循对方字段