分类
基本数据类型:
整数型:byte(字节型)、short(短整型)、int(整型)、long(长整型)
浮点型:float(单精度)、double(双精度)
布尔型:boolean
字符型:char
引用类型:String、类、接口、数组......
注:Java各数据类型都有固定的范围和字段长度,不受具体OS[操作系统]的影响,以保证java程序的可移植性。
整数型
整数型字面值被默认为int类型,想让整数型字面值被当做long类型来处理的话,要在字面值后添加L(或l)。
声明 long类型变量时,最好以L或l结尾。
浮点型
在java语言中,所有浮点型字面值,都默认为double类型来处理。要想该字面值当做float类型处理,须在字面值后加F(或f)。
double和float存储的都是近似值,有些数字计算机无法储存。例:3.14......
注:浮点数计算时会有偏差。
布尔型
在java语言中,boolean类型只有2个值:true 和false,没有其它值。
层储存时只占一个字节,false底层是0,true是1。
字符型
字符常量是用单引号( ' ' )括起来的单个字符。
在java中,char的本质是一个整数,在输出时,是unicode码对应的字符。所以,可以直接给char赋一个整数,然后输出时,会按照对应的unicode字符输出。
char类型是可以进行运算的,相当于一个整数。
字符型存储到计算机中,需要将字符对应的码值(整数)找出来,比如'a'
存储:'a' ——>码值97——>二进制——>存储
读取:二进制——> 97——> 'a'——>显示
自动类型转换
int a= 123;
/*
123为int类型字面值,a为int类型变量
int类型的123.赋值给int类型的变量,无类型转换
*/
long b=456;
/*
456为int类型字面值, 占4个字节
b为long类型变量 占8个字节
int类型的123赋值给long类型的变量,有类型转换
*/
int类型——> long类型,int类型为小容量,long类型为大容量,小容量可自动转换成大容量,被称为自动类型转换机制。
强制类型转换
long a=100L;
/*
100L是long类型字面值
a是long类型变量直接赋值,无类型转换
*/
int b=100L
/*
100L是long类型字面值
b是int类型变量
编译错误:大容量不能直接赋给小容量
*/
大容量转换成小容量,需要进行强制类型转换
强制类型转换符:()
例:
inta=(int)100L
强制转换后编译虽然通过了,但运行时可能出现精度损失所以需要谨慎使用,因为损失精度后可能损失严重。
强转原理:将原始数据的二进制表达前几位给删除。
例:将4个字节转为2个字节,须将4个字节删去2个字节的数据
大容量转化成小容量时,如果字面值在小容量的类型取值范围内,该面值可以直接赋值。(仅限于byte,short,char,且只能赋值为字面值,不能是计算结果和变量)
小结
数据类型之间的转换规则
①八种基本数据类型中,除布尔类型之外都可以互相转换。
②小容量向大容量转换,称为自动类型转换。
容量由小到大;byte <short< int<long<float< double
char
注:任何浮点型数据不管占用多少个字节都比整数型容量大。char和short平级,可表示的种类数量相同,但char可以取更大的整数。
③大容量向小容量转换,称为强制类型转换。转换时需要加强制转换符。(会出现精度损失)
④当字面值没有超出byte,short,char的取值范围时,可直接赋值。
⑤多种类型混合运算时,先转化成容量大的类型再运算。
补充:byte,sgort,char不能间接赋值(即赋值为另一个变量中的值)。
short s=5;
byte b=s; //编译报错:无法从short转化为byte
//解决:
byte b= (byte) s;