关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
来源:互联网 发布:js调用android的方法 编辑:程序博客网 时间:2024/05/19 09:15
关于一道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),所以是正确的。
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?【Java面试题】
- java:关于short s1=1;s1=s1+1;short s1=1;s1+=1;short s3=s1+s2;中存在的简单数据类型转换问题的理解
- java:关于short s1=1;s1=s1+1;short s1=1;s1+=1;short s3=s1+s2;中存在的简单数据类型转换问题的理解
- short s1 = 1; s1 = s1 + 1和short s1 = 1; s1 += 1的区别
- 【JAVA基础小问题】short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
- Short s1=1; s1=s1+1;会报错吗,编译错误还是运行时错误
- 关于short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确的问题
- short s1=1;s1=s1+1;为什么是错的.而s1+=1;为什么不报错
- short s1 = 1; s1 = s1 + 1; short s1 = 1; s1 += 1;
- 开户自动旋转在某应用中横屏后关闭自动旋转,该应用不会自动恢复到竖屏,
- matlab中的sort函数
- 19. Remove Nth Node From End of List
- Spark算子篇-combineByKey实战
- FragmentTabHost的使用--仿微信首页搭建
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- Python中@property的粗略理解
- 阿里面试题总结
- 【天梯赛-练习题】L2-007 家庭房产
- Objective C类方法load和initialize的区别
- 使用jutil测试程序出现错误java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=classestest]
- 几种排序
- 开平方算法
- 第一次