Java:字节算术运算

Java:字节算术运算,java,Java,我的代码怎么了?以下代码适用于整数类型的数据,但无法适用于字节类型的数据 public class Exchange { public static void main(String[] args) { //int a = 23, b = 44; byte a = 23, b = 44; a = a + b; b = a - b; a = a - b; System.out.println("a=" + a + "b=" + b);

我的代码怎么了?以下代码适用于整数类型的数据,但无法适用于字节类型的数据

public class Exchange {
    public static void main(String[] args) {
    //int a = 23, b = 44;
    byte a = 23, b = 44;
    a = a + b;
    b = a - b;
    a = a - b;
    System.out.println("a=" + a + "b=" + b);
    }
}
我知道数据类型byte可以保存范围为-2^(8-1)到-1+2^(8-1)的数据。但我用的是23和44,所以少于127


在这里,我收到了错误消息“不兼容类型:从int到byte的可能有损转换”。

简单地说,将算术运算的结果转换为byte,如下所示:

public class Exchange {
    public static void main(String[] args) {
    //int a = 23, b = 44;
    byte a = 23, b = 44;
    a = (byte) a + b;
    b = (byte) a - b;
    a = (byte) a - b;
    System.out.println("a=" + a + "b=" + b);
    }
}

提示:-使用Alt+Enter进行提示

如果您想对
字节
执行算术运算并将其分配回
字节
变量,则应明确告知编译器“您知道您在做什么”,否则您将得到错误信息,即通过转换
int
(算术运算的结果)到
字节
(在左侧)

要解决此问题,请将算术运算的结果强制转换回字节:

    byte a = 23, b = 44;
    a = (byte) (a + b);
    b = (byte) (a - b);
    a = (byte) (a - b);

更正的代码在这里

 public static void main(String[] args) {
    //int a = 23, b = 44;
    byte a = 23, b = 44;
    a = (byte) (a + b);
    b = (byte) (a - b);
    a = (byte) (a - b);
    System.out.println("a=" + a + "b=" + b);
}

如果您添加
a=127
b=127
结果是否适合一个
byte
?这个问题解决了!谢谢@stackoverflow!@NawinMandal使用Alt+Enter关键字,它可以帮助您找到一种方法。在您的情况下,我只是复制了您的代码并在运行该应用程序之前强制执行了您的算术运算。@ersks谢谢你,先生!我会在用谷歌搜索问题之前使用这项技术。这准确地解释了算术加宽的原因。@ersks谢谢你,先生!它对我起作用了。@NawinMandal!@user508633,这个链接对我不起作用!它可能有帮助,但我发现很复杂。@NawinMandal在做“alt enter”不理解你所做的事情的意义对开发人员来说是一个坏习惯。专业提示:花时间浏览第一条评论中的链接,确保你理解加宽意味着什么,否则,你注定会在将来遇到讨厌的bug。。。