刚看到一面试题,题目是这样的:short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?java
初看之下就是s1=s1+1和s1+=1的区别。在开发中咱们基本上是使用后一种方式,也不太去追究具体的区别,由于效果出来都是同样的,因此就会很天然的认为没什么区别。我一开始也就是这么认为,可是做为一道面试题老是有点用意的,若是没区别就不会拿出来了,因而我就有这种疑惑。有疑惑就解决嘛,细看一下,有个short,而1是int类型,那么应该是跟类型转换有关的了。那么具体是怎么转的呢?从大脑这深海里调出有关类型转换的知识点过一遍,原来s1=s1+1;是先把s1转换成int类型,而后再执行s1+1运算,那么运算出来的结果就是int类型了,可是以前定义的s1是short类型哦,因此int类型赋值给short就会出错了,咱们知道short是能够隐式转换成int的,而int转short就须要强制转换了;s1+=1呢?+=是大多数高级语言(java,c#)既定的运算符,相似s1+=1这样的运算,在执行完s1+1运算以后会强制转换成+=符号前面的表达式的类型 ,因此就不会出错了。总结一句话就是s1+=1比s1=s1+1多了一步强制转换的过程呢!面试