类型转换
- 类型转换仅限于基本数据类型的转换
- 数据类型大小比较:
byte -> short -> char -> int -> long -> float ->double
小(低).....................>......................大(高)[数据宽度]
- char之所以能在整数类型中,因为char本质上就是数字。
- 而float、double,则是因为小数的优先级大于整数。
强制转换:
- 高 --> 低
-
因为byte的数据宽度小于int的数据宽度,所以报错!
-
如果非要想把int数据类型转换为byte
-
这回的就不报错了,这就是强制转换!
-
*高数据类型转为低数据类型,要在等号后面加括号并且写入要转的低数据类型
-
强制转换就是 (类型)变量名
-
但是!!!!!!!!
-
如果强转的数值超出了数据宽度
因为byte的最大数值宽度就是127,一旦超出了低数据类型的宽度,就属于内存溢出!
- 最后输出的结果就不可预料
自动类型转换:
- 低 --> 高
- 由于是int转换成浮点,所以就变成小数.0
注意:
1.boolean类型不能参与转换。
2.不能对象类型转换为不相干的类型(就好比人不能转换成猪,但是男人可以转变成女人)。
3.在把高容量转换为低容量时候,要强制转换。
4.转换时候可能遇到内存溢出,或者精度问题(就是小数浮点)。
- 这个就是精度问题,精度问题一般都是小数转的。
印象加强:
- 理解char类型的本质然后再明白自动强制转换的差别
细节错误和算法:
-
操作较大的数值时,应该注意一下内存溢出的问题。
-
JDK7新特性。下划线之间可以用下划线来分割。
错误:
为何会出现这样的错误,为何不是300亿?
如果最后相乘的total的类型int换成long的话,应该会对吧?
-
total类型从int变成long也不对,是为什么?
-
原因:
无论total的类型变成什么,他都不会出正确答案的,因为在等号右边运算的时候,都是int类型相乘的,乘积已经超过了int可以容纳的内存,造成内存溢出,如果要获得正确答案,应该先在等号右边任意一变量自动转换为long类型,才可以容下更大的数据宽度!
-
正确答案:
再来一个小细节:
long a = 6666666666L;
long b = 6666666666l;
long类型后面的L表示最好写成大写的L,因为小写的l容易与一弄混,养成良好的编码习惯!加油!