Java 各数据类型所占字节数

199 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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
  • 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);
}

如有错误,欢迎评论区指出~