目录

  • 数据类型:
  • 常量与变量:
  • 类型转化


数据类型:

  • 整型: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位,所以任何整型变量值要赋给字符变量,都要强制转换
  • 布尔类型不能与其他基本类型转换