论坛首页 入门技术论坛

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

浏览 1665 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-06-23  
OO

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

 

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型存在的意义何在?继续疑惑中。

   发表时间:2008-06-23  
你说的太对了,所以我编程一般都用int的。
short存储数据时用可以省空间
0 请登录后投票
   发表时间:2008-06-23  
因此在编程时,取数据时直接保存到int,计算时用int
只有在保存时最后一步才转成short
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics