[java] view plain copy
  1. package common;
  2. public class ShortTypeTest {
  3. /*
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. short s1 = 1; s1 = (short) (s1 + 1);//简单类型
  9. short s2=1; s2 +=1;//复合类型,复合赋值操作符+=,
  10. System.out.println(s1+";"+s2);
  11. //运行时Console输出什么,你知道吗?
  12. }
  13. }

关于一道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),所以是正确的。

可以运行下看看public class $ {    public static void main(String... _) {        System.out.println("SHORT的取值范围" + Short.MIN_VALUE + "~" + Short.MAX_VALUE);        System.out.println("SHORT长度" + Short.SIZE);    }}

结果:

SHORT的取值范围-32768~32767SHORT长度16

类似的 Integer,Double....都有

关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?相关推荐

  1. java s1_转!!Java 基础面试题的剖析: short s1=1;s1 = s1 +1 报错? s1+=1 呢

    package common; public class ShortTypeTest { /* * @param args */ public static void main(String[] ar ...

  2. 转自知乎 知乎ID@方志宏 记一道简单的Java面试题

    记一道简单的Java面试题 这可能是历史上最简单的一道Java面试题 题目很简单,完成代码,判断一个整数是否是奇数 public boolean isOdd(int i) 相信相当数量的人都在已经准备 ...

  3. 2022 最新 Java 基础 面试题(一)

    2022 最新 Java 基础 面试题(一) 1.面向对象的特征有哪些方面? 3.String 是最基本的数据类型吗? 4.float f=3.4;是否正确? 5.short s1 = 1; s1 = ...

  4. 知识点整理,Java基础面试题(一)

    写在前面 整理了一些互联网大厂的面试题,这些面试题经常会被问到,也是作为Java工程师需要掌握的一些知识点,毕竟理论和实践的结合,才是王道,分片整理,每天嗑些知识点,快乐每一天,如果对你有帮助,记得点 ...

  5. 100道Java基础面试题收集整理(附答案)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  6. 判断一个java对象中的属性是否都未赋值_100道Java基础面试题(一)

    100道Java基础面试题(一)未来大家将步入职场,面试的时候面试官还会问大家一些Java相关的问题.小编整理出100道非常实用的面试题目,可以帮助双体的小伙伴应对面试,我们一起来看看都有哪些吧! 1 ...

  7. Java继承_30道最常问的Java基础面试题

    30道最常问的Java基础面试题 1. 面向对象和面向过程的区别面向过程优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采 ...

  8. Java 基础面试题,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. Java基础知识面试题(2021最新版)

    转载自:https://thinkwon.blog.csdn.net/article/details/104390612 文章目录 Java概述 何为编程 什么是Java jdk1.5之后的三大版本 ...

最新文章

  1. 2021-1-17 随笔
  2. 《研发企业管理——思想、方法、流程和工具》——1.11 论成本
  3. 作为面试官的一点小感想
  4. .NET CF WM上创建快捷方式
  5. Java web 三大框架异常学习总结
  6. Ucosii消息邮箱使用
  7. oracle rac standby,oracle RAC数据库建立STANDBY(二)
  8. ROS入门-13.服务数据的定义与使用
  9. java常量池的理解_Java常量池的大概理解
  10. Python学习杂记_1_PyCharm使用的一些收获
  11. Matlab函数——randn
  12. [backbone] Getting Started with Backbone.js
  13. html5拼音显示,HTML5:给汉字加拼音?收起展开组件?
  14. Hutool工具集之DateUtil(日期时间工具)详解使用
  15. 信息论与编码_信道编码
  16. 沙箱 sandbox
  17. 一个宠物商店的程序c语言,C语言-宠物商店管理系统-实训报告
  18. 华为rh2288v2服务器系统,扩展能力强 华为RH2288H V2服务器解析
  19. 可视化系列讲解:css3D:如何绘制正方体,长方体等
  20. Canny算子中的梯度求取及非最大值抑制(NMS)实现

热门文章

  1. SCCM 2012系列1 服务器准备上
  2. 静态页转换平台(StaticPol)-静态页生成终极解决方案
  3. [wcf]入门.3.4
  4. 比特币(包括BTC和BCH)的零确认到底安不安全?
  5. mybaits if判断进入不了
  6. Android 应用审核乱象:诈骗软件冲上排行榜首
  7. 用SQL命令查看Mysql数据库大小
  8. 鲍尔默说:你的东西再大 微软也装得下
  9. zabbix添加自定义监控项目-配置邮件告警-测试告警
  10. 数据结构之链表反向打印