这是我写的第一篇文章,正经写代码还没多久,先从基础开始。以后会把所学到的技术问题不论大小分享出来
今天来讨论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内自动完成。
文章是自己看书的一些理解,可能有错,欢迎指点。。