(图片来源:《Java核心技术卷1》)
Java为强类型语言,即必须为每一个变量声明一种类型
8种基本类型
- 4种整型:byte, short, int, long(1,2,4,8字节)(1字节=8bit)
– eg:
byte 取值范围的详细推导:
计算机规定了0000 0000 代表0;
1000 0000代表的-0没有意义,必须找个 -127~127 之外的数和它对应,则人为规定-0就是-128,而且这么做完美适合计算机做减法运算。
所有的整型都是有符号的
长整型数值有一个后缀L 或1 (如4000000000L)
十六进制数值有一个前缀0x 或0X (如0xCAFEL)
二进制数值有一个前缀0b 或0B
可以为数字字面量加下划线, 如用1_000_000 表示一百万
- 2种浮点型:float, double(4,8)
float 单精度;double 双精度
很多情况下 float 类型的精度很难满足需求;绝大部分时候都采用double
float 类型的数值有一个后缀F 或f,没有就默认为double 类型;也可以在浮点数值后面添加后缀D 或d
???
- 1 种用于表示Unicode 编码的字符单元的字符类型:char
'A’为字符字面量,"A"为包含字符A的字符串
Unicode 编码机制:打破了传统字符编码机制的限制
- 1 种用于表示真值的类型:boolean
整型值和布尔值之间不能进行相互转换。
字符总结
-
ASCII 美国标准信息交换码
标准的单字节字符编码方案,规定了字符如何在计算机中用二进制数字进行表示,用于基于文本的数据。
现状只占用了一个字节的后面7位,最前面的一位统一规定为0
GBK 汉字内码扩展规范
双字节编码方案;对应汉字的编号方式,不能国际通用 -
Unicode 通用字符集
多字节:码点值最初用两个字节的十六进制数字表示,后来不断增补扩大为用三个字节或以上的十六进制数字表示
缺点:不能区别 Unicode 字符 和 ASCII 字符的编码(计算机不知道三个字节应该表示一个字符,还是分别表示三个字符);Unicode 统一硬性规定,每个字符都用多个字节编码,那么英文字母编码前都必然有0位,这对于存储和传输都是极大的浪费
UTF编码应运而生,旨在解决过长编码问题,使通讯更国际化 -
UTF编码
针对 Unicode 的可变长度字符编码
编码规则:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
3)解读 UTF-8 编码非常简单:如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。