本帖最后由 姿_`态 于 2014-6-7 22:28 编辑
前两天老是弄不明白,这个问题,今天借你的问题做一个总结。
其实基本类型的强制转换主要是包括隐式强转,和显示强转,隐式强转就是他自己转的,显示强转就是我们自己手动把类型转化,一般显示强转是因为类型自动隐式强转,如果我们不手动强转是会出现错误的。
下面用几个例子,配合解释下。byte b=4;
b=b+1;//错误,因为右侧变成了int型 ,那么是为什么呐,因为1是int型,占四个八位,b是byte型,占1个八位,他们相加,需要4个八位空间才能容纳下它们的和,所以,右侧隐式强转为int型,然而左侧是byte型,装不下,所以会报错。
b=(char)(b+1);//正确,这个就是显示强转,我们手动把本来是int类型的类型转化为和左侧相同的char型已规避错误;
b+=1;//正确,为什么呐,和上面有什么区别呐,因为这个提前要进行一次判断,就是1是不是在byte范围内,结果是,所以就把1当做byte型,赋给左边。
byte a=3,b=4,c;
c=a+b;//错误,两个byte型相加,不应该还是byte类型?为什么会出现错误呐,这是因为在java中,两个byte相加,为了怕他们的再放到byte中放不下,所以把他们强转为int型,这里的强转是隐式的,然而左边是byte类型数据,所以当然会报错。
c=3+4;//正确,这个为什么会正确呐,右侧不适合上面一样的? 原因是,右侧的和是7,然后他就会判断,7是不是在byte数据类型的范围内,结果是,所以就把7当做是byte类型,直接赋值给左边。所以正确。
int a;
byte b=3,e;
short s=3,t;
e=s+b;//错误
t=s+b;//错误
a=s+b;//正确 这个例子得出一个结论就是,byte类型数据,和别的类型的数据也是会转化为int类型。为什么一个byte类型,和一个short类型会转化为int类型,一个占1个八位,一个占4个八位
不是应该相加后转化为short类型? 原因是当两个数 相加后也是怕他放不下,所以就转为int,而short就放不下。
byte b=3,e;
float f=3f;
double d=3;
f=b+f;//正确。
d=b+d;//正确。这两个和byte和int相加一样,都是隐式强转为所占空间更大的哪一个数据类型。
所以我们可以得出一个结论就是byte 和别的数据类型的数据相加,如果另一个数据的数据类型<int类型,也就是short ,byte 小于4个八位的数,那么他就会隐式强转为int类型,而和别的相加就会隐式转化为更高位的数据类型。
感觉像关于这样的问题很多,但是大多都差不多,我们不可能一一列举,概括的不是很好,希望对你有所帮助
|