您的位置:首页 > 编程语言 > Java开发

java基础之数值类型转换的问题

2017-03-08 22:04 671 查看
最近有很多的数值类型转换的问题,全都是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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: