Java的数据类型转换

发布时间:2022-06-23 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java的数据类型转换脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

类型转换

  • 由于Java是强类型语言,所以在进行某些运算的时候,需要用到类型转换

  • 由于所有类型的数据,本质都是数字,所以它们都可以通过类型转换之后,进行计算

  • 运算中,不同类型的的数据先转换为同一类型,然后再进行计算

1、优先级

  1. 不同的数据类型,容量(即可赋值的范围)不同,所以转换的优先级也不同,从低到高如下图,

    Java的数据类型转换

     

     

     

    注:浮点数类型的转化优先级要高于整数类型,所以float的容量小于long,但是仍然优先级高于long

2、强制转换

  1. 优先级从高到低的类型转换,必须使用强制转换

    下图的数据类型转换方式,就是强制转换,把int类型的数据,强制转换为byte类型

    Java的数据类型转换

     

     

  2. 但是上图的代码出现了一个问题,就是经过类型转换后,输出的结果出现了问题,如下图

    Java的数据类型转换

     

     

     

  3. int类型的变量i,赋值为128,正常输出也是128,但是转换为byte后,输出变成了-128,这是由于byte类型的可赋值范围是-128至127,int的赋值128,超出了byte类型的可赋值范围,这种超出可赋值范围的类型转换导致的输出错误,就叫做内存溢出,或者叫数据溢出

  4. 在编程时,一定要避免出现会产生内存溢出强制转换的操作。

3、自动转换

  1. 优先级从低到高的类型转换,可以使用自动转换

    如下图,将int类型的变量,转换为double类型的变量,不需要任何额外的操作,系统自动完成转换,就叫自动转换

    Java的数据类型转换

     

     

  2. 自动转换输出的结果如下图,int类型输出为128,double类型输出为128.0,是因为从整数类型转换成了浮点数类型,但对数据的精度没有影响

    Java的数据类型转换

     

     

     

4、类型转换的注意事项

  1. 不能对布尔值类型进行转换,无论是将其他类型转换为布尔值类型,或者是将布尔值类型转换为其他类型,都会直接报错。如下图

    Java的数据类型转换

  2. 不能把变量的数据类型转换为不相干的类型

  3. 高容量(也就是高优先级)类型转换为低容量(也就是低优先级)类型时,需要使用强制转换

  4. 转换的时候,可能会出现内存溢出,或者精度的问题。

    上面已经说过内存溢出的问题,下图就是会影响精度强制转换

    Java的数据类型转换

     

     

    如图,将浮点数23.49(double)-45.59(float)强制转换为int类型,如下图

    Java的数据类型转换

    输出的结果变成了23和-45,小数点后面的内容会被直接省略,这就造成了数据的精度问题。

  5. 自动转换和强制转换的应用举例

    因为所有的字符的本质都是数字,因为Uncode编码表的存在,所以字符类型char可以转换为整数类型int并参与计算,,计算之后的结果又可以转换为字符进行输入

    如下图,定义一个char类型的变量c,赋值为字符‘a’,再定义一个int类型的变量n,赋值为c+1

    因为int类型的优先级高于char类型,高转低可以自动转换,所以进行c+1的运算时,会进行自动转换,将字符'a'自动转换为Uncode表中对应的数字97,所以计算之后,输出变量n的值为98,之后再把n的值转换为char类型进行输出,因为int优先级高于char高专低必须强制转换,所以必须加上(char),最后输出的是字符b,说明再Uncode编码表里,数字98对应的字符是b。

    Java的数据类型转换

     

     

    5、操作比较大的数时,需要注意溢出问题

  1. JDK7以上的新特性,数字之间可以用下划线“_”进行分割,方便识别,不会影响输出和数字的大小,如下图

    Java的数据类型转换

     

     

    输出的数字仍然是10亿

    Java的数据类型转换

     

     

  2. 假设上面的t是一个人的年薪,那么计算这个人20年的总工资,就会出现问题,如下图

    Java的数据类型转换

    年薪t没有超出int类型的范围,年限y也没有超出int类型的范围,但是两者相乘的积超出了范围,于是造成了total变量的内存溢出,输出了一个负数,很明显这是错误的

  3. 如何避免这个错误呢?能否将total的数据类型修改为范围更大的整数类型long呢?结果如下图

    Java的数据类型转换

     

     

  4. 很明显,转换total的数据类型并没有用,因为数据类型的计算是先转换再计算,因此ty相乘,是先确认数据类型,彼此都是int类型,然后再进行计算,因此计算出的结果也已经是int类型了,已经因为内存溢出,而得出了错误的值,然后再将这个错误的值自动转换为long类型,而Long类型的赋值范围是包含了这个错误的负数值的,所以即便转化为long类型,也无法改变输出的错误结果。

  5. 正确的做法是,在计算之前,就就将t或者y的值先强制转化为long类型,当然也可以两个都强制转换,这样接下来的计算,也会将计算的结果直接转化为long类型,这样就避免了内存溢出造成得到错误的值,如下图

    Java的数据类型转换

    输出的结果为

    Java的数据类型转换

  6. 事实证明,三种在计算过程前将参与计算的变量进行强制转化的方法,都是可以保证最后输出的值是正确的

 

 

 

 

 

 

脚本宝典总结

以上是脚本宝典为你收集整理的Java的数据类型转换全部内容,希望文章能够帮你解决Java的数据类型转换所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: