开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
在Android开发中,由于手机内存的限制,往往需要考虑到各个数据类型所占用的字节数,那么各个数据类型的占用的字节数是多大呢?又有哪些需要注意的地方?
1. 基本数据类型
System.out.println("Byte byte size: " + Byte.SIZE / 8);
System.out.println("Short byte size: " + Short.SIZE / 8);
System.out.println("Char byte size: " + Character.SIZE / 8);
System.out.println("Int byte size: " + Integer.SIZE / 8);
System.out.println("Float byte size: " + Float.SIZE / 8);
System.out.println("Double byte size: " + Double.SIZE / 8);
System.out.println("Long byte size: " + Long.SIZE / 8);
由输出结果可以看出;
byte占1个字节- 8位带符号的二进制补码整数
- 取值范围:-128~127
short占2个字节- 16位带符号的二进制补码整数
- 取值范围:-32768~32767
char占2个字节- 单个的16位Unicode字符,他的最小值为为
\u0000,最大值为\uffff
- 单个的16位Unicode字符,他的最小值为为
int占4个字节- 32位带符号的二进制补码整数
- 取值范围:-2的31次方~2的31次方-1
float占4个字节double占8个字节long占8个字节- 64位的二进制补码整数
- 取值范围:-2的63次方~2的63次方-1
boolean无法获取到所占用的字节- 只有true和false两种值
- 用于跟踪真/假条件的简单标志
- 仅代表一小部分信息,其大小不是精确定义的
2. 中文字符
在Java中,中文字符所占字节数取决于字符的编码方式,中文字符在每种编码方式中所占用的字节数都不相同,其中全角字符会相应比半角字符所占用字节数高出一倍。
try {
String name = "梨";
System.out.println("UTF-8: " + name.getBytes("GB2312").length);
System.out.println("GBK: " + name.getBytes("GBK").length);
System.out.println("UTF-8: " + name.getBytes("UTF-8").length);
System.out.println("UTF-16: " + name.getBytes("UTF-16").length);
System.out.println("UTF-32: " + name.getBytes("UTF-32").length);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
- GB2313编码格式下占用2个字节
- GBK编码格式下占用2个字节
- UTF-8编码格式下占用3~4个字节
- UTF-16编码格式下占用3~4个字节
- Unicode扩展区的一些汉字存储需要4个字节
- UTF-32编码格式下占用4个字节
- 该编码下所有字符存储都需要4个字节
3. 英文字符
try {
String name = "s";
System.out.println("UTF-8: " + name.getBytes("GB2312").length);
System.out.println("GBK: " + name.getBytes("GBK").length);
System.out.println("UTF-8: " + name.getBytes("UTF-8").length);
System.out.println("UTF-16: " + name.getBytes("UTF-16").length);
System.out.println("UTF-32: " + name.getBytes("UTF-32").length);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
如有错误,欢迎评论区指出~