黑马程序员技术交流社区
标题: 【武汉校区】分享:Java数据类型和数据类型转换 [打印本页]
作者: 武汉分校-小舞 时间: 2016-3-22 16:00
标题: 【武汉校区】分享:Java数据类型和数据类型转换
本帖最后由 武汉分校-小舞 于 2016-3-22 16:02 编辑
Java数据类型和数据类型转换
数据类型概述Java是一种强类型的语言,对每一种数据都规定了明确的数据类型,不同的数据类型在内存中所占用的内存空间不一样。
数据类型分类在Java中把数据类型分为基本数据类型和引用数据类型,它们在内存中的位置不一样,基本数据类型在栈内存当中,引用数据类型在堆内存当中。基本数据类型又分为整数型,小数型(浮点型),字符型和布尔型;引用数据类型包括类(class),接口(interface)和数组([])。请看下图
基本数据类型中,每一种数据类型在内存中所占用的空间也不一样,所表示的数据范围也不一样,请看下图
注:E表示10的几次幂,用“^”表示2的几次幂
数据范围分析一个byte类型的数据占用1个字节,1个字节是8位,二用最高位表示符号位(0表示整数,1表示负数),其他位表示数值为,所以有了下面的数据范围
符号位 数值位 十进制
正数 0 1111111 127
负数 1 1111111 -127
有一个特殊的值,如果数值位全都是0,那么就有+0和一个-0,为了避免重复,将10000000(可以理解为1即表示数值位,也表示符号位)规定为-128
正数 0 0000000 0
负数 1 0000000 -128
short,int,long以此类推,可以得到上图所示的数据范围
数据类型转换同一个数据类型可能在多个数据范围内,如127即在byte范围内,也在short,int,和long的范围内,既然表示的是同一个数据,那么他们之间就可以相互转换,但是转换可以分为下面两种情况
默认类型转换有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
注意:当byte,short和char在参与运算的时候,系统会默认的将数据类型转换为int数据类型再参与运算
由此可以总结出默认转换时一种从小到大的转换,数据的大小发生改变
我们可以把byte,short,int,long看成不同容量的杯子,而杯子里面的水就是数据,byte杯子里面的水可以倒入short,int,long杯子里面,水的量不会改变;反之则不一定
例如:
int a=3;
byte b=4;
bytebb=a+b;// 这里赋值不正确
上面的代码中,因为a是int类型,b是byte类型,a和b做加法运算,b会默认的提升为int类型,再参与运算,得到的结果也是int类型,那么再把结果用byte接收,就会有错
强制类型转换上面的例子,我们知道a与b的和为7,而7明明是在byte的范围内,我们就想让赋值给byte类型,怎么做呢?
可以用到强制类型转换,格式如下:
目标数据类型 变量名 =(目标数据类型)被转换数据
按照这个格式,把上面的例子转换一下
Int a=3;
Byte b=4;
Byte bb=(byte)(a+b);
强制转换详解Int a=3的二进制表现形式,4个字节
0000-0000 0000-00000000-0000 0000- 0011
Byte b=4的二进制表现形式 1个字节
0000-0100
a+b在做运算的时候b会默认的转换为int类型,如下
二进制 十进制
0000-00000000-0000 0000-0000 0000-0011 3
+ 0000-0000 0000-0000 0000-0000 0000-0100 4
0000-00000000-0000 0000-0000 0000-0111 7
得到的结果是7,是一个int类型(4个字节),
我们知道7是在byte的范围内,需要把int类型强制转换为byte(1个字节),就是把int的前三个字节给截掉,只保留最后的一个字节(8位),如下
0000-00000000-0000 0000-0000 0000-0111
那么得到的结果就是1个byte类型数据0000-0111
强制类型转换注意事项强制类型转换容易造成精度损失,在上面的例子中7是在byte范围内了,可以用强制转换数据的大小没有发生改变,但是如果被转换的数据超过了byte范围,强制转换就数据的大小就会发生改变
如:int a=263
0000-00000000-0000 0000-0001 0000-0111
byte b=(byte)a;将a强制转换为byte
0000-00000000-0000 0000-0001 0000-0111
那么得到的结果就是1个byte类型数据0000-0111 结果为7
归纳:(1)容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
(2)有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。
想获取最新传智播客武汉中心分享技术文章请加QQ 1641907557 ,后期会分享更多与实体班同步教程,助你冲击月薪20K!
推荐阅读:
作者: sl943508135 时间: 2016-3-22 20:15
学习了 总结的不错
作者: 604840337 时间: 2016-3-22 20:49
不错,感谢总结
作者: mundane 时间: 2016-3-22 21:14
头像是本人吗?我已经看醉了
作者: 武汉分校-小舞 时间: 2016-3-23 09:15
作者: 武汉分校-小舞 时间: 2016-3-23 09:15
作者: wangzai628 时间: 2016-3-24 22:48
不错,赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |