文章目录
前言
通过学习Java中的四类八种数据类型,我们知道一个数据给一个变量赋值的时候存在三种不同的情况:
- 类型一致,不存在类型转换
- 自动类型转换,小容量自动赋值给大容量
- 强制类型转换,大容量赋值给小容量,可能导致的的结果就是精度损失
一、基本数据类型转换
基本数据类型之间是存在固定的转换规则的,现总结出以下6条规则。无论是哪个程序,将这6个规则套用进去,问题迎刃而解。
-
八种基本数据类型中,除了boolean类型不能转换,剩下七种类型之间都可以进行转换
-
如果整数型字面量没有超过byte、short、char的取值范围,可以直接将其赋值给byte、short、char类型的变量
-
小容量向大容量转换称为自动类型转换,容量从小到大排序为:byte<short(char)<int<long<float<double,其中short和char都占用两个字节,但是char可以表示更大的正整数。
-
大容量转换为小容量,称为强制类型转换,编写时必须添加“强制类型转换符”,但运行时可能会出现精度损失,谨慎使用。
-
byte、short、char类型混合运算时,先各自转换成int类型再做运算。
-
多种数据类型混合运算时,各自先转换成容量最大的那一种再做运算。
二、习题
- 下列程序有什么错误?
short s1=1;
s1=s1+1;
报错
因为s1是short类型,1是int类型,short和int混合运算时,short会自动转换为int类型,所以s1+1编译器检测出是int类型,int类型是无法赋值给short类型的变量s1。所以需要强制类型转换,即:
short s1 = 1;
//注意强制类型转换的格式
s1 =(short) (s1 + 1) ;
- 为什么char类型的变量可以存储一个中文的汉字,为什么?
java中的文字采用unicode编码,一个中文占用2个字节,char类型在java中就是占用两个字节,所以java中的char类型完全可以容纳一个汉字。
- flaot f=1.0有什么错?long a=2147483648有什么错?
在java语言中,有这样一条规定,只要是浮点型的字面量,例如1.0、3.14等默认会被当做double类型处理,如果想让程序将其当做float类型处理,需要在字面量后面添加f\F,或者使用强制类型转换。整数型字面值默认当做int类型处理,如果以long形式表示,需要在字面值后面添加L\l。