黑马程序员技术交流社区

标题: 基本类型的转换 [打印本页]

作者: 吴华清    时间: 2014-6-7 18:31
标题: 基本类型的转换
本帖最后由 吴华清 于 2014-6-7 20:07 编辑

基本类型的强制转换的规则是怎样的?
作者: 无水    时间: 2014-6-7 19:12
这几天在看编程基础的视频,关于强制转换我的理解如下:
1.赋值运算时,如果等号右边数据的数据类型所占内存空间大于等号左边数据的数据类型,运行时会报错。比如定义byte b=1; 再给b赋值 b = b+1; 这时等式右边的1默认是int型的,所以等式右边的b会被进行自动类型转换(从低到高),被提升为int型,两个数据相加得出的结果自然是int型的,但等式左边的b仍然byte型的,所以这样赋值就会出错。这时就需要对右边的数据进行强制类型转换:b = byte(b+1);
2。可以归纳为当高类型数据给低类型数据赋值时,需进行强制类型转换。
刚学习,粗浅理解。

作者: 小周务商    时间: 2014-6-7 19:16
楼上已经正解了。
作者: 姿_`态    时间: 2014-6-7 19:44
本帖最后由 姿_`态 于 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类型,而和别的相加就会隐式转化为更高位的数据类型。

感觉像关于这样的问题很多,但是大多都差不多,我们不可能一一列举,概括的不是很好,希望对你有所帮助

作者: 吴华清    时间: 2014-6-7 20:04
姿_`态 发表于 2014-6-7 19:44
前两天老是弄不明白,这个问题,今天借你的问题做一个总结。
其实基本类型的强制转换主要是包括隐式强转, ...

谢谢学友的指点,很详细,很受用。
作者: 吴华清    时间: 2014-6-7 20:06
无水 发表于 2014-6-7 19:12
这几天在看编程基础的视频,关于强制转换我的理解如下:
1.赋值运算时,如果等号右边数据的数据类型所占内 ...

也加深我的理解,谢谢。
作者: 寐海流风    时间: 2014-6-12 10:50
姿_`态 发表于 2014-6-7 19:44
前两天老是弄不明白,这个问题,今天借你的问题做一个总结。
其实基本类型的强制转换主要是包括隐式强转, ...

学习了,总结的很详细。
作者: 不一样的颜色    时间: 2014-6-12 11:44
一楼是正解,没错
作者: sun_jun    时间: 2014-6-14 20:24
学习了!
作者: niushicha    时间: 2014-7-27 12:58
只能是小范围到大范围转换。
作者: GYSWL    时间: 2014-8-9 16:58
强制转换包括隐式强转,显示强转
作者: 段sir!    时间: 2014-9-14 23:29
根本占的内存空间来,从低到高战,是自动类型转换,从高到低转,是强制类型转换
作者: pj1988    时间: 2015-1-17 13:41
简单说大转小就需强转,具体规则上面的大神已经总结了
作者: 377413612    时间: 2015-1-27 23:34
谢谢学友的指点,很详细,很受用。
作者: DxxD    时间: 2015-3-10 09:48
姿_`态 发表于 2014-6-7 19:44
前两天老是弄不明白,这个问题,今天借你的问题做一个总结。
其实基本类型的强制转换主要是包括隐式强转, ...

嗯嗯,很不错
作者: HeiMa2Wangkunpe    时间: 2016-7-23 00:33
格式:(强转后的类型)(需要被强转的数据)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2