Java基本数据类型与类型转换
写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。
- 对于文章中出现的任何错误请大家批评指出,一定及时修改。
- 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
- 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
Java基本数据类型与类型转换
本文关键字:8种、基本数据类型、整数类型、浮点类型、字符类型、布尔类型
一、基本数据类型
1. 概述
在Java中,所使用到的类型可以分为两大类,一类是基本数据类型,一共有8种,包含:整数,小数,字符,布尔。另外一类是引用类型,包含:字符串,数组以及各种Java类。
2. 整数类型
整数类型是一个很常用,也比较简单的类型,在计算机中以二进制的方式存储,其中有一位是符号位。
- byte:-2^7 ~ 2^7 - 1
- 1字节
- 8bit
- short:-2^15 ~ 2^15 - 1
- 2字节
- 16bit
- int:-2^31 ~ 2^31 - 1
- 4字节
- 32bit
- long:-2^63 ~ 2^63 - 1
- 8字节
- 64bit
3. 浮点类型
对于浮点(小数)类型,存储的方式与整数有所不同,其中符号位固定为1位,另外两部分为指数部分和小数部分。我们都学过科学计数法的表示方式,对于十进制,小数点前的部分的取值范围为1-9,在存储前也会整理成二进制的形式,会变成(+/-)1.b × 2^a。那么指数部分对应的就是a,尾数部分对应的就是b。
对于float,指数部分为8位,尾数部分为23位。对于double,指数部分为11位,尾数部分为52位。
- float:约1.4 × 10^-45~3.4 × 10^38,精度为6~7位
- 4字节
- 32bit
- double:约4.9 × 10^-432~1.7 × 10^308,精度为15~16位
- 8字节
- 64bit
4. 字符类型
对于字符类型,在进行存储时,也同样是一个整数,只不过在使用时会进行编码。说的直白一些就是,建立起了一个数字和字符之间的对应关系,只要明确字符对应的数字,或者直接将字符给出,都能够正确表示出一个字符。
- char
- 2字节
- 16bit
5. 布尔类型
布尔类型是一个范围最小的数据类型,只用一个二进制位就可以来记录,0表示false-假,1表示true-真。
- boolean:true/false
- 1字节
- 1bit
6. 字面值
当我们在使用一个数据类型时,总会进行一些直接赋值的操作,完整的格式如下:
- 数据类型 变量名称 = 变量值
如:int i = 5;char c = ‘中’;double = 3.14;那么出现在等号右侧的值就被称为字面值。
- 整数类型字面值
- 默认十进制(int类型):136,当非常大的数需要用long存储时结尾需要添加字母L/l
- 二进制(0b开头):0b101
- 八进制(0开头):073
- 十六进制(0x开头):0xAC23
- 浮点类型字面值
- 单精度(以F/f结尾):236.935f
- 双精度(默认小数类型):68263.2811
二、数据类型转换
1. 自动类型转换
图中黑色的部分,可以自动进行转换,并且不会出现任何使用上的问题,只不过存储数据空间需要变大些,这也就是由低精度向高精度的转换。
其中红色箭头的部分,也可以自动进行转换,即:代码上不需要添加转换的操作,且编译不会出现问题。但是在使用时会出现精度丢失的问题,因为对于整数类型,在其所支持的存储范围内精度都是可以保证的,而对于float和double类型,精度只有相应的67和1516位,所以在使用时一定要注意!
2. 强制类型转换
那什么时候需要手动来进行类型转换呢?就是与箭头方向相反时,以及由高精度到低精度来进行赋值操作时,必须要手动进行强制转换。这意味着,你知道这其中的风险,并一定要这样做,那么无法被记录的字节将被直接截断和丢弃,最高位被识别为符号位。所以,只有当数据本身不会超出目标数据类型时,我们才会进行转换,否则有可能会得到各种奇怪的结果。
3. 表达式中的类型提升
当我们在使用表达式进行计算时,如最基本的四则运算,加减乘除。
short s1 = 40;
short s2 = 40;
short s3 = s1 + s2;// 该行编译错误,why?
short s4 = (short)(s1 + s2);// 编译通过
- 1
- 2
- 3
- 4
对于以上的情况,是因为出现了类型提升,当符号两侧出现整数时,运算结果的类型将被提升为默认的整数类型:int,而将int类型赋值给short是需要类型转换的。同样,运算符号两侧出现小数类型时,运算结果的类型将被提升为默认的浮点数类型:double,在赋值给其他变量时同样要进行类型转换。
文章来源: blog.csdn.net,作者:小山猪的沙塔,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/u012039040/article/details/103484994
- 点赞
- 收藏
- 关注作者
评论(0)