类型转换
Java是强类型语言,所以要进行某些运算的时候,需要用到类型转换。
低------------------------------------------------------------>高
byte,short,char—>int—>long—>float—>double
运算中,不同类型的数据先转化为同一类型,然后进行运算。
分为:
· 强制类型转换
(类型)变量名 高-->低
强制类型转换需要注意内存溢出问题
例:
int i = 128; byte b = (byte)i;//内存溢出(下面会说) /*以上操作为类型转换,将int的128转换为了byte * 具体方法:int a = xxx; * 另一种类型如byte b = (这种类型此处示范为byte,byte要用括号括住)后面跟a;*/ //即可将int转换为byte System.out.println(i); System.out.println(b); //注意此处输出了-128,因为byte的最小值是-128,最大值是127,此时直接赋值128,就会出问题 //这个问题叫做:内存溢出,内存溢出了,128这个值就变样子了 //所以我们在转换的时候要尽量避免内存溢出 //这里加了括号的转换叫做强制转换,是从高到低
· 自动类型转换
什么都不用写,自动会转换 低-->高
例:
int m = 128; double w = m; System.out.println(m); System.out.println(w); //这里输出了128和128.0,而double上没有写强制转换类型所需要的((double)m) //说明此处直接进行了类型转换,为自动类型转换。
此处注意:
-
不能对布尔值进行转换!
-
不能把对象类型转换为不相干的类型(比如不能把一个人变成一头猪,但是可以把一个男人变成一个女人)!
-
在把高容量转换为低容量的时候,要进行强制转((想要转换的类型)定义过的变量)!
-
转换的时候注意数据大小,避免内存溢出,或者精度问题!
这里可以看到强制转换将b变成数字98,将数字98变成b
char c = 'a'; int d = c+1; System.out.println(d); System.out.println((char)d); //由Unicode表可知,a所对应的ASCII值为97(字符的本质还是数字!) //此处字符'a'是char类型的,d是int类型,此处要用强制转换将d转化为char类型 //在输出时再进行强制转换,注意此处得到了98,也就是97+1. //还可以把98自动转换为char类型,就会得到字符'b',也就是说明在ASCII表里a后面就是b
所有字符本质都是数字,c = a =97,c+1自然就等于98,强制转换后98就是b了。
其他注意点
//操作比较大的数据的时候,注意溢出问题 //比如一年赚10亿,赚20年,算一下总数 int money = 1_000_000_000; //这里在输入较大数据十亿的时候,0很多不好数,可以加下划线_ //“shift+-” //JDL7新特性,数字之间可以用下划线分割,下划线不会被输出,方便我们写代码的人看 System.out.println(money); System.out.println("下面是算钱===================================================="); char years = 20; int total_money = money*years; System.out.println(total_money); //按理说应该是输出200亿,但发现他输出了一个负数-1474836480 //这就是因为计算的时候溢出了 //这时候就有人说:我用一个long来计数 long total_money2 =money*years; System.out.println(total_money2); //会发现仍然是负数-1474836480,(干了20年,血亏了14亿/doge) //这是因为int溢出了,再赋值都没有用 //也就是:默认是int,转换之前已经存在问题,他变负数是在int时就变了,用long输出仍然还是负数 //这时候,要么改mone前面的int,换成long: long money3 = 1_000_000_000; char years3 = 20; long total_money3 = money3*years3; System.out.println(total_money3); //此时就输出了200亿,马云也直呼内行! //要么就强制转换类型,直接省的重新再输一次代码,从而输出200亿: System.out.println("============================================================"); long total_money4 = money*((long)years); System.out.println(total_money4); //小细节:字母L,尽量用大写L,虽然赋值的时候小写l也可以,但是小写l容易看成1,养成习惯。