因为Java语言是 强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
------Java中数据类型有哪几种?
基本数据类型和 引用数据类型两种
------ 基本数据类型分类(4类8种)
整数型(默认数据类型是int)
byte 占一个字节 取值范围是-128到127
short 占两个字 取值范围是-2^15~2^15-1
int 占四个字节 取值范围是-2^31~2^31-1
long 占八个字节 取值范围是-2^63~2^63-1( 定义该数据类型数据时,后面需要加上l或者L,最好写大写L,因为小写有点像数字1)
浮点型(默认数据类型是double)
float 占四个字节 取值范围是-3.403E38~3.403E38 单精度(后面需要加f或者F)
double 占八个字节 取值范围是-1.798E308~1.798E308 双精度(后面可以加d或D,但是可以不加,因为浮点数默认就是double型)
字符型
char 占两个字节 取值范围是0~65535
布尔型
boolean
注意:java中没有明确指定boolean类型的大小可以认为它是八分之一个字节,因为只需要一个0或者1就能确定true还是false了
------数据类型转换之隐式转换
隐式转换是java的默认转换规则,当取值范围小的数据类型与取值范围大的数据类型进行运算时,会先将数据类型小的提升为大的,再进行运算
比如:int类型数据与byte数据类型进行相加运算时,byte类型的数据会自动提升为int类型,再与int类型相加,所以最后结果也会是int类型的
注意:混合运算时,比int类型小的(byte,short,char)都会自动提升为int类型,其他类型都会自动提升为比自己大的数据类型
------数据类型转换之强制转换
强制转换是当取值范围小的数据类型与取值范围大的数据类型进行运算时,本来数据类型小的会自动转换会大的,但是如果你想得到小的数据类型,将需要强制转换大的为小的
比如:int类型数据与byte数据类型进行相加运算时,你想得到byte类型的结果,就需要先将int类型的数据强制转换为byte型
格式:假设a是int类型,b是byte型,要想a加上b的结果是byte类型,需要将a强制转换,格式为 byte c = (byte)a +b;
注意:在强制转换时,如果这个数超出了被赋值的数据类型的取值范围,得到的结果就会与期望结果不同,比如将int数据强转为byte时,将需要把int类型前面的3个字节全部去掉,
此时可能会出现精度丢失的问题
------char数据类型
取值范围:0~65535
char类型可以存储中文,因为java采用Unicode编码,这个编码中每个字符占用两个字节,因为每个中文也是占用两个字节,所以java中字符可以存一个汉字
------float类型与long类型的取值范围到底谁大?
他们底层的数据结构不同,float类型表示的数据范围要比long类型的大
long类型:2^63-1
float类型:3.4*10^38>2^63-1