锁定老帖子 主题:请教有关数值运算之间类型转换
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-23
最近在一些面试的过程中遇到类似于:
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型存在的意义何在?继续疑惑中。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-23
你说的太对了,所以我编程一般都用int的。
short存储数据时用可以省空间 |
|
返回顶楼 | |
发表时间:2008-06-23
因此在编程时,取数据时直接保存到int,计算时用int
只有在保存时最后一步才转成short |
|
返回顶楼 | |
浏览 1665 次