【问题标题】:Byte incrementing operation in Java [duplicate]Java中的字节递增操作[重复]
【发布时间】:2019-06-20 18:54:59
【问题描述】:

当我们尝试使用增量运算符和加法运算符来增加字节变量时会发生什么。

public class A {
    public static void main(final String args[]) {
        byte b = 1;

        b++;

        b = b + 1;
    }
}

请告诉我在哪里可以找到释放出这么小的东西的来源?请帮帮我。

【问题讨论】:

  • What happens... 你为什么不试试呢?
  • “请给我源代码,我们可以在其中找到这么小的东西” - Java 教程,任何好的 Java 教科书......或者如果你擅长阅读正式文档,Java 语言规范
  • 除非你使用b,否则你不会看到任何事情发生。
  • @PeterLawrey.. 为什么?第三条语句实际上不会编译。无法将 int 转换为 byte

标签: java


【解决方案1】:

不同之处++ 运算符中有一个implicit casting,从intbyte,而您必须这样做explicitly,以防万一使用b = b + 1

b = b + 1;  // Will not compile. Cannot cast from int to byte

你需要一个明确的演员:

b = (byte) (b + 1);

b++ 可以正常工作。 ++ 运算符会自动将值 b + 1(即 int)转换为 byte


这在JLS - §15.26.2 Compound Assignment Operators 中明确列出:-

E1 op= E2 形式的复合赋值表达式是等价的 到 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只评估一次


请注意,b + 1 操作将为您提供int 类型的结果。所以,这就是为什么您需要在第二个作业中显式转换。

【讨论】:

  • 但是当我使用 int 时它仍然显示错误???
  • 对不起 Rohit .....当我使用你所说的显式演员时,仍然给我错误。
  • @Praveen.. 它不应该给出错误 AFAIK。您能发布您当前的代码吗?
  • public class A3{ public static void main(String str[]){ byte b=1; b++; //第 2 行 System.out.println(b); b=(字节)b+1; //第 3 行 System.out.println(b); }}
  • @Vishal.. 实际上,你得到的表达式结果的类型至少是int。现在,当您添加一个更高的类型时,结果的类型就是那个更高的类型。之间的操作:-byte and byte is intint and byte is intint and long is long 等等,
【解决方案2】:

会发生什么?实际上b = b + 1 不会编译。

您必须将其显式转换为byte,因为b + 1 的计算结果为int。并且不能保证int 可以适合byte

b = (byte)(b + 1);

【讨论】:

  • 嗯,b = b + 1 不会编译。
  • 为什么会发生这种事?
  • @Praveen.. 请参阅下面的答案。
【解决方案3】:

变量会增加两次

【讨论】:

    【解决方案4】:

    b++; b=b+1;是等价的,并且会产生相同的字节码。

    在 main 方法完成之前,b 将等于 3。

    编辑:实际上它们并不等价:b=b+1;是错误的,应该是 b=(byte) (b+1); [转换为字节,否则为int]

    【讨论】:

    • 但是当我执行代码时出现编译时错误???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多