一、数据类型分类:主要分为 基本类型、引用类型两大类;
二、基本类型 转换原则
1.从低位类型到高位类型自动转换;从高位类型到低位类型需要强制类型转换:
a:boolean不参与转换运算
b.其他的基本类型都是低转高不强转,高转低需要强制转换
2.算术运算 中的类型转换:
a, 基本就是先转换为高位数据类型,再参加运算,结果也是最高位的数据类型;
b, byte short char运算会转换为Int;//这个是因为防止数据溢出吧
(1)如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。
(2)如两操作数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。
(3)如两操作数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。
(4)如两操作数均不为double、float或long,则两操作数先被转换为int,再参与运算。
特殊:
(1)如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。
(2) 当运算符为自动递增运算符(++)或自动递减运算符(–)时,如果操作数为byte,short或char类型不发生改变;
举例子,面试常考:
例子1:
a: short s1=1,s1=s1+1; 对吗?
//错在 s1是short 类型 +1变为int 类型 S1=s1+1类型必须强制转换s1=(short)(s1+1)
b: short s1=1; s1+=1;s1+=1 ;对吗?
正确 S1+=1相当于s1=(short)(s1+1) ,+=等运算会把右边的类型强制转换为左边类型!!!
c: short s1=1,s2=1; short s3=s1+s2;错误 两个short相加类型默认是 int 因为可能存在溢出风险所以默认是int
short s3=(short)(s1+s2)//存在溢出风险
short ,byte,char进行运算 当他们都接近极大值 可能溢出数据,因此默认转换int为结果;
举个简单例子,byte a=127,b=127; a+b=254结果大于byte范围了哦
例子2:
byte x=2; double y=2.0;
(short)x/y*2 的类型是? //double
可以看到首先将x强转为short ,参与运算的类型变成了 short,double,int
最高的是double类型 因此会将非double类型值强制转换后再运算 ,结果double