本问题已经有最佳答案,请猛点这里访问。

我有三个简短的变量。

当我将两个加在一起并将结果分配给第三个时,eclipse告诉我需要将其转换为short!

short sFirst, sSecond, sThird;

sFirst = 10;

sSecond = 20;

sThird = sFirst + sSecond;

但是,当我先进行简单分配,然后进行增量分配时,一切都很好。

short sFirst, sSecond, sThird;

sFirst = 10;

sSecond = 20;

sThird = sFirst;

sThird += sSecond;

为什么是这样 ?

JLS(第15.8.2节)说:

"The binary + operator performs addition when applied to two operands of numeric type, producing the sum of the operands."

"Binary numeric promotion is performed on the operands (§5.6.2)."

这意味着表达式的操作数将转换为int。 因此,加法会将int添加到int。

"The type of an additive expression on numeric operands is the promoted type of its operands."

您的情况是int。

我不会猜测为什么这样做。 但是,这绝非偶然。 如果查看JVM规范中定义的字节码指令集,将会看到int,long,float和double ...有算术指令,但较小的整数类型则没有。

谢谢斯蒂芬。 由于具有C / C ++背景(超过20年),这种限制似乎是一种异常,应该由编译器而不是程序员真正处理。

Java语言规范中精确指定了此行为。

为什么如此具体说明问题的答案仅仅是猜测,而不是真正的答案。 我在Oli Charlesworth的支持下进行的"有根据的猜测"是因为等效语义适用于C语言和其他类似语言。 C语言中的语义是这样的(再次是"有根据的猜测"),因为它们允许编译器生成最佳代码。

对"为什么"的一个非常合理的答案是"因为它呼应其他类似C语言的语义"。

@OliCharlesworth我猜这是因为它为编译器提供了最大的自由度,可以生成最佳代码(我当然不是javac)。

但是,在C或C ++中,您无需将两个短裤加成

@Simon您的意思是显式投射。 那只是一种语法技巧,而这正是Java所采取的"保护程序员免受自身攻击"的态度。

java short相加_关于java:short加short是一个int相关推荐

  1. java double相加_解决java中两个double类型的值相加

    代码: /** * 提供精确的加法运算 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(doub ...

  2. java short 后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 你学一个东西 先学会他的定义 java语法是这样定义的 类型修饰符 变量名 = 值 其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int bool ...

  3. java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 你学一个东西 先学会他的定义 java语法是这样定义的 类型修饰符 变量名 = 值 其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int bool ...

  4. 类加载器 java委托机制_解析Java虚拟机中类的初始化及加载器的父委托机制

    类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始化: 2.在静态代码块中进行初始化. 没有 ...

  5. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

  6. java 百分比相加_2019年Java面试题基础系列228道(5),快看看哪些你还不会?

    2019年Java面试题基础系列228道 Java面试题(一) 第一篇更新1~20题的答案解析 第二篇更新21~50题答案解析 第三篇更新51~95题答案解析 Java面试题(二) 第四篇更新1~20 ...

  7. java虚拟机编译_[四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式...

    前言简介 前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明 想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下,java编译器到底是如何编译 ...

  8. java 对象压缩_理解Java对象:要从内存布局及底层机制说起,话说....

    前言 大家好,又见面了,今天是JVM专题的第二篇文章,在上一篇文章中我们说了Java的类和对象在JVM中的存储方式,并使用HSDB进行佐证,没有看过上一篇文章的小伙伴可以点这里:< 这篇文章主要 ...

  9. JAVA数组子集_【Java虚拟机】JVM系列学习之JVM体系(一)

    一.前言 为什么要学习了解Java虚拟机 1.我们需要更加清楚的了解Java底层是如何运作的,有利于我们更深刻的学习好Java. 2.对我们调试错误提供很宝贵的经验. 3.这是合格的Java程序必须要 ...

最新文章

  1. int printf(const char* fmt,...)
  2. c2000 pro 固件更新_一加7Pro系统更新新增屏幕侧滑返回手势
  3. dll已加载但找不到入口点dllregisterserver_Java 是如何加载类的?
  4. 通过反射获得类的构造引用无视private修饰符
  5. 用python爬小说_5分钟带你用Python爬完《剑来》小说(附完整代码)!
  6. CentOS 7 上安装 MySQL5.7
  7. java静态常量存在哪里,Java面试题及解析
  8. Windows mobile 下读取手机SIM卡信息
  9. python编程100例-Python3经典100例(①)
  10. Java多线程机制(一)
  11. 《pr2019》怎么加字幕
  12. Android距离传感器亮屏,Android距离感应器P-Sensor浅析
  13. 和陌陌一样,今天 Instagram 也在网页版上又迈了一步
  14. 写一段wavefront_reader的代码
  15. window7(64bit)环境下安装基于TensorFlow后端的Keras 教程(CPU版)
  16. docker安装包在linux上部署安装
  17. 网站安全狗安装时服务器名,解决网站安全狗安装后访问网站需要用户名密码的方法...
  18. 低代码开发,染发界的白转黑|“低代码”系列(一)
  19. echarts 中国地图标注所在点
  20. 视频加密/视频认证/视频添加Logo

热门文章

  1. 工程图学与计算机绘图习题集,工程图学及计算机绘图习题集.pdf-2019-02-08-19-18-58-642.docx...
  2. Netty框架之编解码机制一(ByteBuf以及Tcp粘包拆包)
  3. 西门子s7-200smart程序块pou加密解锁方法
  4. Latex中宏包总结
  5. HoloLens第三视角开发【保姆级教程】【踩坑记录】
  6. redis工具类RedisUtils
  7. Android开发之蓝牙通信
  8. C语言处理excel
  9. java 素数求和,100-200之间所有素数求和程序代码(二个版本)
  10. MSP432驱动舵机串口输出角度