最近有很多的数值类型转换的问题,全都是java基础,今天总结下,废话不多说,直接上代码: 1:
byte a = 1; byte b = 2; byte c = a + b; c是多少?2:
byte a = 1; byte c = 0; c += a; c是多少?3:
byte a = 125; byte b = 2; byte c = (byte) (a + b); c是多少?4:
byte a = 125; byte b = 3; byte c = (byte) (a + b); c是多少?相信小伙伴们想急切的看答案吧,这里首先公布下答案
1:错,2:1,3:127,4:-128你们回答对了多少? 全部答错的,拉出去别当程序员了, 这里回答几个关键点: java基本类型转换,精度小于int的数值运算的时候都会被自动转换为int后进行计算。+=这类运算符,java会自动进行强制转换,不用人为干预。 精度高的向精度低的转换,得需要强转,也就是小转大,自动转,大转小,得强制。强制转之后,如果发现转后的数超过强转类型的取值范围,但不超过2倍的取值范围的话,会从最小的开始记录,这句话比较绕,举个例子:
byte a = 125; byte b = 125; byte c = (byte) (a + b); System.out.println(c);附上java基本类型取值范围表 可以看到byte 取值范围在 -128—127 ,上面话的意思就是a和b 先转为int类型,之后相加,也是int类型,强转byte类型时,由于byte取值范围限定,存不了250这个数,所以byte类型做了个操作,127 满了之后又从新从-128开记录了,相当于-128+122=-6,把 -6 给了byte类型,大家都知道byte最大为127,再大就会报错,两个byte最大值相加之后,byte = ? ,答案是 -2。理解了么?
下面的例子,跟上面例子差不多,惟一要注意的是char本身在码表中可以用数字表示的, char 类型 +int 时char会先转换为ASCII表对应的数字,没有的话就无所为了,其他的都简单。
String str1 = "hello"; int myInt = 12; char ch1 = 'a'; System.out.println(str1 + myInt + ch1); System.out.println(myInt + ch1 + str1); System.out.println(ch1 + str1 + myInt);