• 基本类型
      • byte
        • 1(字节)
      • short
        • 2(字节)
      • int
        • 4(字节)
      • long
        • 8(字节)
      • float
        • 4(字节)
      • double
        • 8(字节)
      • char
        • 2(字节)
      • boolean
        • -
          1. @org.junit.Test
          2. public void test(){
          3. System.out.println("byte所占位数:" + Byte.SIZE);
          4. System.out.println("byte所占字节数:" + Byte.SIZE/8);
          5. System.out.println("int所占位数:" + Integer.SIZE);
          6. System.out.println("int所占字节数:" + Integer.SIZE/8);
          7. System.out.println("short所占位数:" + Short.SIZE);
          8. System.out.println("short所占字节数:" + Short.SIZE/8);
          9. System.out.println("float所占位数:" + Float.SIZE);
          10. System.out.println("float所占字节数:" + Float.SIZE/8);
          11. System.out.println("double所占位数:"+ Double.SIZE);
          12. System.out.println("double所占字节数:" + Double.SIZE/8);
          13. System.out.println("char所占位数:" + Character.SIZE);
          14. System.out.println("char所占字节数:" + Character.SIZE/8);
          15. System.out.println("long所占位数:" + Long.SIZE);
          16. System.out.println("long所占字节数:" + Long.SIZE/8);
          17. }
          运行结果:
          image.png

    注意:

    1. 浮点数默认为double类型,带后缀F的为float类型,float在存储大型浮点数时可以节省内存空间;例:1.23、1.23d为double类型,1.23为double类型。
    2. 整型数据默认为int类型,如果一个整数的值超出了int的表示范围,可以用long类型表示,例子: long a = 100000L,Long b =-200000L。”L”理论上不分大小写,但是若写成”l”容易与数字”1”混淆,不容易分辩。所以最好大写.
    3. 为什么char类型在Java中占2byte,在其他语言中占1byte呢?
      1. 因为Java是Unicode编码,在Unicode编码中 1char == 2byte
      2. 上世纪60年代,美国制定了一套英文字符与二进制位的对应关系,称为ASCII码,沿用至今。ASCII码规定了128个英文字符与二进制的对应关系,占用一个字节(实际上只占用了一个字节的后面7位,最前面1位统一规定为0)
      3. ASCII编码只占用1个字节,也就是说最多只能表示256个字符。那么数万汉字怎么表示?日语韩语拉丁语等等象形文字又该怎么表示?所以90年代又制定了一套新的规范,将全世界范围内的字符统一使用一种方式在计算机中表示,这就是Unicode编码。Unicode 规定可以使用多个字节表示一个字符,例如 a 的编码为 01100001,一个字节就够了,”好“的编码为 01011001 01111101,需要两个字节。
    4. Boolean占多少字节?
      1. java规范中,没有明确指出boolean的大小.
      2. 在《Java虚拟机规范》一书中的描述:” 大部分指令都没有支持整数类型byte、char和short,甚至没有任何指令 支持boolean类型。编译器会在编译期或运行期将byte和short类型的数据带符号扩展(Sign-Extend)为 相应的int类型数据,将boolean和char类型数据零位扩展(Zero-Extend)为相应的int类型数据。与之类 似,在处理boolean、byte、short和char类型的数组时,也会转换为使用对应的int类型的字节码指令来 处理。因此,大多数对于boolean、byte、short和char类型数据的操作,实际上都是使用相应的对int类 型作为运算类型(Computational Type)来进行的。”
      3. 还说了:” 如果读者希望了解更详细的信息,可以阅读由Oracle官方授 权、由笔者翻译的《Java虚拟机规范(Java SE 7)》中文版(字节码的介绍可见此书第6章)。”