我的第一篇CSDN

来源:互联网 发布:javascript 函数名 编辑:程序博客网 时间:2024/06/05 20:25

这是我写的第一篇文章,正经写代码还没多久,先从基础开始。以后会把所学到的技术问题不论大小分享出来

今天来讨论java中数据自动转化的问题。


在程序中,自动转化随时可能发生,发生时往往是在我们不经意间。

例如  System.out.println(1+1.5);

这句话输出2.5 ,其实它已经在无形间将第一个数转化为浮点型 然后再进行计算


对于自动转化,当满足两个条件时发生自动转化

1. 数据兼容

2. 转化后的类型表示范围比前一个大


第一个条件比较好理解  你可以执行 1+2     1+1.55    甚至是 1+'c'这样的表达式 因为他们都表示数字(字符char类型根据它的ASCII码值来表示,所以'c'先自动转化为ascii值99 再进行计算),而你无法执行  1+true 这样式子,原因是boolean类型只有 true 和false两个值,boolean型无法与数字或者字符兼容 。


第二个条件即是一个条件,也是一条规则。

先说它是一个条件

A:int a = 5.0;
B:float b = 'c';

A句报错,B句正确。对于A句,由于a 是一个int 型   5.0是个浮点型,我们明显知道 浮点型的表示范围比int型要大,因此这个     浮点型-----》int型     就违反了自动转化的第二个条件。 

而对于B句   是 char--》浮点型,表示范围   char<int<float  且 char和float是兼容的,因此他们完成了自动类型的转化。


再说它也是一条规则

对于(1+2.236)/2,这是个  (int+double)/int  

首先根据该规则,自动转换是  低精度---》高精度转化(或者也可以说是   表示范围小----》表示范围大),因此这里的执行的逻辑应该是

       (int + double)/ int

--》(double+ double)/int

--》   double / int

--》  double/double

--》  double 最后执行结果。。

而这些转化都由java内自动完成。


文章是自己看书的一些理解,可能有错,欢迎指点。。

0 0
原创粉丝点击