Java面试题二十六

栏目: Java · 发布时间: 6年前

内容简介:Java面试题二十六

前言:

最近一直没有整理笔试题,也是工作太忙,笔试题整理稍复杂,总担心因为自己的疏忽或者技术不精而误人子弟,昨天群里小伙伴问了一个很有意思的问题,这里拿出来给大家看看。

以下两个片段执行结果差异的原因是什么?

片段一:

short s=1;
s=s+1;

片段二:

short s=1;
s+=1;

可以自己组织一下答案,最后看结论

结论分析:

片段一自然是编译不通过的 ,提示损失精度 。

那么片段二为什么能编译通过呢? 

隐式类型转换可以从小到大自动转,即byte->short->int->long,如果反过来会丢失精度,必须进行显示类型转换。

回到这一题来看,s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换,所以将一个int类型赋给short就会出错。

而s+=1不同,由于他是使用+=操作符,在解析的时候s+=1就等价于s = (short)(s+1),也就是s+=1 <=> s =  (s的类型)(s+1)。

(最后结论引自百度知道,略有删改。

解答出处:https://zhidao.baidu.com/question/250880637.html)

扩展:

基本类型数据及所占字节

数据类型 所占字节
boolean 未定
byte 1字节
char 2字节
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节

隐式转换与显示转换概念

隐式类型转换

隐式转换也叫作自动类型转换, 由系统自动完成.

从存储范围小的类型到存储范围大的类型.

byte ->short(char)->int->long->float->double

显示类型转换

显示类型转换也叫作强制类型转换, 是从存储范围大的类型到存储范围小的类型.

当我们需要将数值范围较大的数值类型赋给数值范围较小的数值类型变量时,由于 此时可能会丢失精度 ,因此,需要人为进行转换。我们称之为强制类型转换。

double→float→long→int→short(char)→byte

基本数据类型之间的转换规则

1.在一个双操作数以及位运算等算术运算式中,会根据操作数的类型将低级的数据类型自动转换为高级的数据类型,分为以下几种情况:

1)只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;

2)只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;

3)只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;

4)两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。

2. 如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,再做其它类型的自动转换。

3. 对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。 如:

short i=99 ;
char c=(char)i;
System.out.println("output:"+c);

4. 不能在布尔值和任何数字类型间强制类型转换;

5. 不同级别数据类型间的强制转换,可能会导致溢出或精度的下降。

6. 当字节类型变量参与运算,java作自动数据运算类型的提升,将其转换为int类型。

例如:

byte b;
b=3;
b=(byte)(b*3);//必须声明byte。

Java面试题二十六


以上所述就是小编给大家介绍的《Java面试题二十六》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro Git (Second Edition)

Pro Git (Second Edition)

Scott Chacon、Ben Straub / Apress / 2014-11-9 / USD 59.99

Scott Chacon is a cofounder and the CIO of GitHub and is also the maintainer of the Git homepage ( git-scm.com ) . Scott has presented at dozens of conferences around the world on Git, GitHub and the ......一起来看看 《Pro Git (Second Edition)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具