java的数据转换问题,请大神帮我看一下

今天看到书上讲到数据转化,我看不懂,拍给大家,请大家帮我解释一下,谢谢图片说明图片说明

在用system.out.println时会自动转换,你也可以用(float)进行强制转换

java中,两个数运算时,如果类型不同,自动会转成类型相同,如果是int和float计算,则两个数都会转成float后再计算。第一张图a/b会有小数
第二张图
a,b都是整型,除法后a/b取整再转float。所以小数都是0,是因为是a/b除后舍去了小数。

java表达式类型自动提升。所有byte,short,char都被提升为int;有long整个表达式提升为long,float和double情况也一样。

这个其实很简单,涉及到了数据的基本类型,因为在java里面int是整形而float是浮点型,第一个a/b的时候,是整数和小数进行运算,在java里面从大类型转到小类型是自动转换的,所以int会自动转成float.
而第二张图里面要把小数转成整数这样肯定是不能的因为他会涉及到一个容量溢出的问题。打个比方,比如你去买东西,人家说3.0,你给3块人家肯定能接受,但是人家说
3.2,你再给3块这肯定不行,这个时候你说我非要给你3块,这就属于强制了。

这个其实很简单,涉及到了数据的基本类型,因为在java里面int是整形而float是浮点型,第一个a/b的时候,是整数和小数进行运算,在java里面从大类型转到小类型是自动转换的,所以int会自动转成float.
而第二张图里面要把小数转成整数这样肯定是不能的因为他会涉及到一个容量溢出的问题。打个比方,比如你去买东西,人家说3.0,你给3块人家肯定能接受,但是人家说
3.2,你再给3块这肯定不行,这个时候你说我非要给你3块,这就属于强制了。

数据转换的原则:参与运算的两个数据不一致时会自动转换为高精度的(如int类型和float类型一起运算,会自动转换成float类型,而不需要加强制转换);但如果你想转换成低精度的,则需要加强制转换符:(要转换程的数据类型)data,如(int)3.2/2。

如int a=121, b=10 那么a/b=12 因为是int字段忽略小数 ;(float)a/b =12.1

这个没有什么,需要知道double>float>int,运算过程中向高精度类型自动转换,因此第一张图中的结果直接就是浮点类型的。

第二张图就有些意思了,因为参与运算的都是整型数字,所以相除的结果还是整型数字,只不过第一次将这个结果赋值给了一个float类型,因此输出的时候带了一个.0,默认的float输出样式;
而后面编程(float)a/b时,结果不同是因为这时候已经不是两个整型参与运算了,是一个float类型数(float)a和一个整型数b参与运算了,因此跟第一张图结果一样,会将b也升级为float类型数字,从而得到一个float类型的结果。这里要考虑括号优先级大于除法优先级。