基本数据类型
数值型 | 范围
- Byte |8
- Short |16
- Int | 32
- Float |32
- Double |64
-
字符型
-
布尔型
-
范围
| byte | short | int | float | double | long | char | boolean | | —- | —- | —- | —- | —- | —- | —- | —- | | 8 | 16 | 32 | 32 | 64 | 64 | 16 | 1、8、32 | | -2(2-1) | -2~(2-1) | -231~(231-1) | -231~(231-1) | -263~(263-1) | -263~(263-1) | -2~(2-1) | | | | | | | | | | |
Boolean占用几个字节 | 取决于JVM虚拟机
- 未精确定义大小。Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替。
- 1位:Boolean只标识真假2个状态,1位就够。
- 8位:计算机处理数据字节位单位(8bit),其他位0填充。
- 32位:在《Java虚拟机规范》一书中的描述虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”
- int代替原因:32位cpu一次处理32位,寻址只能32位为基本单位,int最合适。
JAVA基础—String
特点
- 实际存储为 final char[] 数组
长度限制 总结:编译器2^16-2=65534,运行期:2^32-1=2147483647个字符
- 其中自定义构造函数长度为(int count),所以int最大范围,java.lang.Integer #MAX_VALUE是2^31-1=2147483647个字符。但是若是在字符常量池中的变量,最多只有65534(2^16-2,null2字节)个字符,超过编译器就会报错。
- 因常量池也有自己的类型,java的utf-8编码的unicode自读在常量池中以CONSTANT_Utf8类型表示.
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
字符与字节
- GBK:英文一个中文两个
- ACSII:英文字母一个字节,中文两个字节,一个二进制序列,在计算机中作为一个数字单元,一般为8位二进制,换算为十进制最小0最大255
- UTF-8:英文字符一个字节,中文三个字节
- Unicode:英文两个字节,中文两个字节