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

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

我有三个简短的变量。

当我将两个加在一起并将结果分配给第三个时,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所采取的"保护程序员免受自身攻击"的态度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值