目录
- 数据类型:
- 常量与变量:
- 类型转化
数据类型:
- 整型:byte(8位)、short(16位)、int(32位)、long(64位)
- 浮点型:float(单精度32位)、double(双精度64位)
- 布尔型:boolean(1位 true false)
- 字符型:char(16位 unicode编码)
- 注意:ture不能与数字1转换,这与C语言不一样
浮点型表示数字方式与整型不一样
常量与变量:
- 常量就是值,常量池里的整型常量以32位int型位存储,浮点型常量以64位双精度存储
- 变量是一个内存空间,里面存储值或引用
- int a = 12; 把常量池的整型赋值给整型变量
- byte b = 12; 把常量池的整型赋值给byte型变量,赋值时,自动把整型的前三个0字节去掉,只保留最后一个值为12的字节
- short c = 12; 把常量池的整型赋值给short型变量,赋值时,自动把整型的前两个0字节去掉,只保留最后两个值为12的字节
- long d = 12; 把常量池的整型赋值给long型变量,赋值时,自动在整型前添加4个0字节
- long e = (2^31-1+72)L; 这个数值超过了int型表示的范围,需要在数字后加L声明一下
- double f = 3.4; 把常量池的64位双精度浮点型赋值给双精度浮点变量f
- float g = 3.4F; 把常量池的64位双精度浮点型赋值给单精度浮点变量g,需要在数字后加F声明,防止损失精度
类型转化
- int a = 6; int b = a; 没问题
- int a = 6; byte b = (byte)a; 此处需要一个强制转换,为什么把常量池的int赋给byte变量可以自动进行,而这里需要强制转换呢,因为整型变量的值可能超过byte型表示的范围。
- 低位整型变量的值赋给高位整型变量,可自动进行
- 高位整型变量的值赋给低位整型变量,需强制进行,如果超出低位表示范围,必然使低位得到不是自己想要的那个数字,而且不会报错
- float a = 1.23F; double b = a; 此处类型转换自动进行
- double a = 1.23; float b = (double)a; 此处类型转换需强制
- 低精度的float变量的值赋给高精度double变量,自动进行
- 高精度double变量的值赋给低精度的float变量,需强制进行,可能在不报错的情况下损失精度
- int/byte/long/short a = 12; float/double b = a; 整型变量的值赋给浮点型,可自动转换
- float/double a = 12; int/byte/long/short b = (int/byte/long/short)a; 浮点变量的值赋给整型变量,需强制转换
- char a = ‘中’; int b = a; 自动转换,每个字符对应一个16位的unicode编码,所以:byte c = (byte)a; 是需要强制转换的,当然,很有可能出现不报错的错误
- byte a = 133; char b = (char)a; 整型变量值赋给字符型变量的时候,因为赋值给字符变量的过程涉及到数组的转换和计算,即使是byte变量只有8位,但在赋给字符变量前先转化为32位,所以任何整型变量值要赋给字符变量,都要强制转换
- 布尔类型不能与其他基本类型转换