类型转换
由于Java是强类型语言,所以在某些时候有运算需求之时,就需要用到类型转换。
为什么能够进行类型转换呢?
* Java中的字符本质还是数字
-
运算规则:
-
不同类型的数据先转化为同一类型,然后再进行运算。
低 -------------------------- 高 byte,short,char -> int -> long -> float -> double 为什么32的float 会排在64 的long后面 原因:小数的优先级一定大于整数
-
什么时候是强制转换,什么时候是自动转换呢?
- 类型从高到低转换就需要强转,从低到高转换就是自动转换。
- 不能对布尔值进行转换
- 不能把对象类型转换成不相干的类型
- 转换的时候可能会存在内存溢出,或者精度问题
public class Demo05 { public static void main(String[] args) { // 类型转换 int i = 129; byte b = (byte)i; // 在变量前面加上括号重新定义暂时类型的形式 -----》强制转换 System.out.println(i); System.out.println(b); // 为什么得到的b 的值为-128呢?? /* * byte的数值范围 -128 - 127;最大的数就是 127 ; * 而我们的i是128 ,这样就会造成内存溢出,内存溢出就会导致得到的结果不正确。 * 内存溢出之后,是怎么计算值的呢? 溢出一点就得到最小值,两点就是最小值加1,以此类推。 */ // 浮点数转成int整数, 就会出现精度问题 float dd = 121.41F; int dd1b = (int)dd; System.out.println(dd1b); // 自动类型转换 short daf = 123; int dsd = daf; System.out.println(dsd); // 操作比较大的数的时候,要注意溢出问题 // JDK7 新特性 , 可以使用下划线来隔开,并不会造成输出。 int money = 100_0000_0000L; //在IDEA中,这里就会直接报错,说int类型没有这么长。 int years = 23; long totle1 = money * years; // 这里就溢出了。想要让他们不溢出,那么就要把右边的运算式先进行强转,再计算。 } }
-
学习来源:B站 --》狂神说java