关于Java中的类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java中的类型转换相关的知识,希望对你有一定的参考价值。

在此首先列出所有的数据类型:

(1)    整型:byte,short,int ,long

(2)    浮点型:float,double

(3)    字符型:char

(4)    字符串型:String(注意,String不属于基本数据类型)

(5)    布尔型:boolean

以上整理已经按照精度高低进行了排列(如果这个数据类型本身有精度的话)

首先应该明白,同一类型中,低精度可以直接转为高精度的数据类型,比如byte数据类型可以直接使用short数据类型接受,同理,short数据类型可以直接由int数据类型接受。高精度向低精度转换时可以通过强转实现。,所以以下只讨论不同类型的数据间的转换,以及特殊情况。

  1. 整型之间:

a)        byte,short之间的运算会自动转换为int类型,实例如图

 技术分享

事实证明,即使是相同的数据类型之间的计算也是会自动转为int的

 技术分享

b)        特殊情况:+= 和 -=的神奇之处

众所周知,定义变量short s=5;进行加运算 s=s+5;等同于s+=5;可是实际上,s=s+5;报错,这是和上面一样的道理,short,byte的运算带有自动转换,会将运算结果由short会转为int(其实char在参加运算时也是转为int),但是s+=5;不会,如图所示:

 技术分享

头脑风暴:设计者是不是担心运算时会产生溢出?

  1. 浮点型

a)        float和double进行运算时,会自动转为double(低精度向高精度自动转换)

 技术分享

b)        float和double进行运算时,会自动转为double(低精度向高精度自动转换),依此可以推出

                         i.              float在与比他本身精度低的数据类型(所有的整型数据:byte,short,int,long,整数常量)运算时,结果是float类型的

                       ii.              double与所有的整型数据类型和float类型的运算时结果都是double。原理同上。

c)         把float或者double类型转为int,short,byte时会损失精度,他会把小数点后面的数字直接省略,不会四舍五入。

 技术分享

d)        一个奇怪的问题,如图

 技术分享

 技术分享

箭头所指的数字小于等于5,Double输出小数点后16位

 技术分享

 技术分享

箭头所指的数字大于等于5,Double输出小数点后15位

Double类型有可能会出现精度丢失,所以在项目中应该尽量避免使用double类型的数据进行计算。

  1. 字符型

a)        字符类型转为整数类型时,是转换为他的ASCII码值。

b)        字符类型的数字如果想要转为整数类型参加计算(字符代表的实际数字),可以减去’0’。

 技术分享

原理:数字对应的ASCII码是连贯的

 技术分享

c)         字符转为浮点型原理不在赘述,字符-int-浮点。

  1. String只能转为字符数组,可以使用toCharArray()方法

 技术分享

也可以使用charAt()方法

 技术分享

技术分享

  1. Int 转为String有两种方法:

 技术分享

以上是关于关于Java中的类型转换的主要内容,如果未能解决你的问题,请参考以下文章

关于Java中的类型转换

求JAVA高手解答!有关于字符串类型转换成日期型!

关于java中任意对象强制转换为接口类型的问题

Java—— 一点关于String的转换

关于继承中的强制类型转换

Golang关于Go中的类型转换