当前位置: 首页 > 知识库问答 >
问题:

为什么byte+=1编译,而byte=byte+1不编译?

胡锋
2023-03-14
   b++;
   b += 1; // compiles
   b = b + 1; // compile error
  b += 1 and b = b + 1 ?

共有1个答案

宿衡虑
2023-03-14

因为b+=1等效于b=(b+1),而b+1的类型被提升为INT(JLS§5.6.2二进制数字提升),因此,如果没有显式转换,其结果不能分配给byte

来自JLS,§15.26.2复合赋值运算符:

形式为E1 op=E2的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的类型,只不过E1只求一次值。

 类似资料:
  • 问题内容: 如果我有一个字节变量: 为什么以下工作: …但这不是吗? 编译器第一理解为第二吗? [编辑] 我知道演员,但我想提请您注意 我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别 问题答案: 因为是的等效项,而的类型被提升为(JLS§5.6.2二进制数值提升),因此,如果不进行显式转换,则不能将其结果分配给它。 根据JLS,§15.26.2复合赋值运算符: 形式为E1 op

  • 问题内容: 我很好奇为什么Golang不提供方法。从性能的角度来看,是否不会复制输入参数并增加成本(尽管由于字符串是不可变的,所以这看起来很奇怪,为什么要复制它们)? 我是Go的新手,不胜感激。 问题答案: 不是函数(或方法)调用,而是类型转换。 类型转换“本身”不会复制该值。但是将a转换为a 确实需要,因为结果字节片是 可变的 ,并且如果不进行复制,则可以修改/更改 不可变 的值(的内容),它必

  • 示例:类中的字段使用。 如果差异太小,那么为什么这些数据类型(、)会存在呢?

  • 主要内容:1 Java.lang Byte介绍,2 Java.lang Byte声明,3 Java.lang Byte方法,4 Java.lang Byte案例1,5 Java.lang Byte案例21 Java.lang Byte介绍 Byte类将原始字节类型值包装在对象中。它的对象仅包含一个类型为字节的字段。 2 Java.lang Byte声明 3 Java.lang Byte方法 方法 描述 byte byteValue() 此方法返回字节一个字节的值。 int compareTo(B

  • 描述 (Description) java.math.BigInteger.toByteArray()返回一个包含此BigInteger的二进制补码表示的字节数组。 字节数组将采用big-endian字节顺序:最重要的字节位于第0个元素中。 该数组将包含表示此BigInteger所需的最小字节数,包括至少一个符号位,即(ceil((this.bitLength()+ 1)/ 8))。 此表示与(b

  • 描述 (Description) java.math.BigDecimal.byteValueExact()将BigDecimal转换为一个字节,检查丢失的信息。 如果此BigDecimal具有非零小数部分或超出字节结果的可能范围,则抛出ArithmeticException。 声明 (Declaration) 以下是java.math.BigDecimal.byteValueExact()方法的