请教有关数值运算之间类型转换

      最近在一些面试的过程中遇到类似于:

 

short i = 1;

i = i+1

 

有什么错误的问题。当然这么基础的问题在之前学习的过程中也有提到过。但是因为没引起足够的重视导致最近面试总是碰钉子。

    其实这就是个类型不匹配的问题。i是short型的,但是1在JAVA中默认的是int型的,而int的取值范围比short大,当出现short和int两者类型之间的运算后,其结果会自动转换成取值范围更广的类型,也就是int型。也就是说在这个时候i+1已经是属于int型的了,而i仍然属于short型,而一个short型的变量等于一个int型的显然会出现类型不匹配的现象,所以报错。我记得原来有人这样给我解释的,我在而eclipse里试验了一下,确实报的是

 

  can not convert from int to short

 

这个错误。后来我尝试了以下代码

int i = 1;

short s = 1;

i = i + s;

 

这个代码也没有报错,看来在i+s后得到的是个int类型的。试验了几种类型后我得出结论:

 

在几种数值类型之间进行运算的时候,得到的结果转换成取值范围更大的那个类型。

 

在得出这个结论之后(其实也不是我得出的,只是想起原来老师的话然后试验而来),我满以为得到了满意的答案,但是随后我又陷入了疑惑之中,当我敲入以下代码的时候居然又报错:

short i = 1;

short c = 1;

i = i + c;

 

而且报的还是can not convert from int to short,这样一来似乎我得到上面的结果有点说不通,既然i和c都是short,那么运算后得到的不是short型?疑惑中。

 

在JAVAEYE朋友的帮助下这个问题解决了,原来JDK为了避免运算结果超过short的范围而在若干short之间进行运算后将其结果给转化成int型 所以上面的 i+c 已经是int型的了,所以要报以上错误。这时新的疑惑产生了,既然short型在运算后都变成int型 那short型存在的意义何在?继续疑惑中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值