- 基本类型
- byte
- 1(字节)
- short
- 2(字节)
- int
- 4(字节)
- long
- 8(字节)
- float
- 4(字节)
- double
- 8(字节)
- char
- 2(字节)
- boolean
- -
运行结果:@org.junit.Test
public void test(){
System.out.println("byte所占位数:" + Byte.SIZE);
System.out.println("byte所占字节数:" + Byte.SIZE/8);
System.out.println("int所占位数:" + Integer.SIZE);
System.out.println("int所占字节数:" + Integer.SIZE/8);
System.out.println("short所占位数:" + Short.SIZE);
System.out.println("short所占字节数:" + Short.SIZE/8);
System.out.println("float所占位数:" + Float.SIZE);
System.out.println("float所占字节数:" + Float.SIZE/8);
System.out.println("double所占位数:"+ Double.SIZE);
System.out.println("double所占字节数:" + Double.SIZE/8);
System.out.println("char所占位数:" + Character.SIZE);
System.out.println("char所占字节数:" + Character.SIZE/8);
System.out.println("long所占位数:" + Long.SIZE);
System.out.println("long所占字节数:" + Long.SIZE/8);
}
- -
- byte
注意:
- 浮点数默认为double类型,带后缀F的为float类型,float在存储大型浮点数时可以节省内存空间;例:1.23、1.23d为double类型,1.23为double类型。
- 整型数据默认为int类型,如果一个整数的值超出了int的表示范围,可以用long类型表示,例子: long a = 100000L,Long b =-200000L。”L”理论上不分大小写,但是若写成”l”容易与数字”1”混淆,不容易分辩。所以最好大写.
- 为什么char类型在Java中占2byte,在其他语言中占1byte呢?
- 因为Java是Unicode编码,在Unicode编码中 1char == 2byte
- 上世纪60年代,美国制定了一套英文字符与二进制位的对应关系,称为ASCII码,沿用至今。ASCII码规定了128个英文字符与二进制的对应关系,占用一个字节(实际上只占用了一个字节的后面7位,最前面1位统一规定为0)
- ASCII编码只占用1个字节,也就是说最多只能表示256个字符。那么数万汉字怎么表示?日语韩语拉丁语等等象形文字又该怎么表示?所以90年代又制定了一套新的规范,将全世界范围内的字符统一使用一种方式在计算机中表示,这就是Unicode编码。Unicode 规定可以使用多个字节表示一个字符,例如 a 的编码为 01100001,一个字节就够了,”好“的编码为 01011001 01111101,需要两个字节。
- Boolean占多少字节?
- java规范中,没有明确指出boolean的大小.
- 在《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)来进行的。”
- 还说了:” 如果读者希望了解更详细的信息,可以阅读由Oracle官方授 权、由笔者翻译的《Java虚拟机规范(Java SE 7)》中文版(字节码的介绍可见此书第6章)。”