Java语法基础2:数值类型的特性 与 类型转换

进制表示

二进制 0b ;
八进制 0 ;int i2 = 010; psvm(i2) = 8 即逢8进1,结果为8。
十六进制 0x ;int i3 = 0x10; psvm(i3) = 16 即逢16进1,结果为16。

浮点数介绍

浮点数有:flout;double。后者更高次。

浮点数特性

①离散性,浮点数是离散存在的。
②有限长度,浮点数的长度是有限的。
float d1 = 2323232323232323232332f;
float d2 = d1 + 1;
System.out.println(d1==d2); //true
③存在舍入误差,浮点数只是近似等于某个值。

因此,最好完全避免使用浮点数进行比较!

类型转换

类型排序

数据类型有高低之分,其顺序由高到低依次为:
byte,short,char -> int -> long -> float -> double
(1)自动转换:类型由高到低的转换为自动转换,无需更多操作。
eg:int i = 128;
long b = i;
此时b会赋予long类,值为128.
(2)强制转换:类型由低到高,需添加类型名称。
eg:int i = 128;
byte b = (byte) i;
但注意:虽然类型强制转为了byte,但是其值超出了byte的范围(-128~127)
Sout(b) = -128

转换的性质

1.布尔值无法转换。
2.不能把对象类型转为不相干的类型。
3.把高容量转为低容量时,强制转换。
4.转换时可能存在内存溢出,或者精度问题。
5.在运算中输出的数值类型满足如下规则:
①若运算各因子中存在long/double那么输出即为long/double。
②若无上述情况,则输出int类型。即byte/short等无效
③简而言之,以int为基准,高为显性,低为隐性。

6.写数值类型后缀时(通常为某个字母,如L;f)避免歧义,如使用大写L。表达规范。

eg:
int money = 10_0000_0000;
int years = 20;
int total = money*years; //结果应该为20亿,但是超过int上限了,故会返回上限值。计算失效。
long total2 = money*years; //试图直接转为long类型,但无效,因为所乘数均为int默认输出也为int类型。
System.out.println(total);
System.out.println(total2);

long total3 = money*((long)years); //在所乘时即将因子类型转换,可以改变类型。
System.out.println(total3); //结果为正确的20亿。

posted @ 2022-01-10 15:31  青梧成林2022  阅读(177)  评论(0)    收藏  举报