package common;

public class ShortTypeTest {

	/*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
short s1 = 1; s1 = (short) (s1 + 1);//简单类型
short s2=1; s2 +=1;//复合类型,复合赋值操作符+=,
System.out.println(s1+";"+s2);
//运行时Console输出什么,你知道吗?
} }

关于一道Java面试题,今天没事就剖析了一下,供初学Java和不清楚的朋友参考学习。

题目:

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

解答:

Java规范有这样的规则

[

1.高位转低位需要强制转换

2.低位转高位自动转.

]

short s1 = 1; s1 = s1 + 1;有什么错?

答: i 是int 型   s1 short型 通过 + 运算后s1 自动转为int 型   所以错!

short s1 = 1; s1 += 1;有什么错?

答: 如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。

这两个表达式都被称为赋值表达式。(x = x + i)表达式使用的是简单赋值操作符(=),而(x
+= i)表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。   换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。

因此,复合赋值表达式可能是危险的。为了避免这种令人不快的突袭,请不要将复合赋值操作符作用于byte、short或char类型的变量。 因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升,要不然数据也装不下呀,是这个道理吧*_*。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。

后面的那个不会发生类型的提升,JAVA规范上说 【e1+=e2    实际上是    e1=(T1)(e1+e2)
】,其中T1是e1的数据类型。   s1+=1等效于   s1=(short)(s1+1),所以是正确的。

不知道现在你是否清楚这个原理了呢?如果再遇到类似的问题,你知道怎样去剖析解答了吗?

最新文章

  1. Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站
  2. SSM框架Web程序的流程(Spring SpringMVC Mybatis)
  3. 在div中设置文字与内部div垂直居中
  4. vs2008 连接 VSS不提示输入密码
  5. cmd命令行指定系统延迟关机时间
  6. iPhone手机GPS地图位置好帮手
  7. Javascipt 时间格式化(日期)
  8. 《第一行代码》学习笔记39-服务Service(6)
  9. poj2187 Beauty Contest(旋转卡壳)
  10. HttpClient工具类
  11. MySQL的数据类型,MySQL增删改--添加主外键、添加属性、删除主外键、改表名、获取系统当前时间等
  12. jquery uploadifive使用
  13. JavaScript数据结构——队列的实现
  14. CYQ.Data 正式支持 DotNET Core 版本发布
  15. leetcode 189 旋转数组
  16. 学习java的第4天 (2019-03-21 11:49)
  17. XSS编码与绕过
  18. asp.net core web项目目录解读
  19. 潭州课堂25班:Ph201805201 爬虫高级 第四课 sclapy 框架 crawispider类 (课堂笔记)
  20. 《DSP using MATLAB》Problem 5.20

热门文章

  1. ionic默认样式android和ios的一些不同(当时真是纠结啊~)
  2. POJ 2492 A Bug's Life (并查集)
  3. 关于JSON的总结
  4. Xcode6编译SDWebImage报错解决方法(SDWebImageDownloaderOperation.m错误)
  5. GetImage
  6. 【Ionic】---App名字和图标修改+启动画修改(SplashScreen)
  7. PHP与MySQL中编码的设置
  8. ListViewDemo
  9. log4Net 简单配置实用
  10. CAS Ticket SSO 登录流程图