Java表达式类型自动提升-阿里云开发者社区

开发者社区> 开发与运维> 正文

Java表达式类型自动提升

简介:
【一道经典的Java面试题】
  short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
  答案是:前者错,后者对。相信不管是否经历过java面试过,大家一定对这道题很熟悉。因为这道题确实太经典了,以至于成为了基本每个老师都会拿出来,当作课堂例题来讲。要说清这道题,首先看看java表达式类型转换规则。
  【java表达式类型转换】
  java是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型。因此在不同类型之间进行赋值操作很容易遇到到类型转换的问题。
  在JAVA表达式中,如果进行运算的几个变量类型不一致,JAVA表达式会采取类型自动提升的操作。Java定义如下的自动提升规则:
  1. 所有byte型、short型和char型将被提升到int型。
  2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。以下是java表达式中类型提升等级。
  
  【复合赋值运算符包含的隐式类型转换】
  short s1 = 1; s1 = s1 + 1会引起编译错误,s1+1表达式类型会自动提升为int类型,而s1的声明类型为short类型,所以将一个int类型的值赋给short类型将引起编译错误。
  但short s1 = 1; s1 += 1;不会出错,因为表达式中使用了+=复合赋值运算符,复合赋值运算符包含了一个隐式的类型转换。s1 = s1 + 1和s1 += 1实际上并不等价。s1+=1实际上等于s1 = (s1的类型)s1+1,复合赋值运算符会自动将他计算的结果值强制类型转换为其左边变量的类型。


最新内容请见作者的GitHub页:http://qaseven.github.io/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章