使用类型转换添加字节Java

我试图在字节数组中添加两个值。 这是我的代码:

byte[] ars = {3,6,9,2,4}; ars[0] = (byte)ars[0] + (byte)ars[4]; System.out.println( ars[0] ); 

我在编译时遇到这个错误:

 Main.java:9: possible loss of precision found : int required: byte ars[0] = (byte)ars[0] + (byte)ars[4]; ^ 1 error 

任何帮助,一如既往,非常感谢。

关闭,但有点偏。

 ars[0] = (byte)(ars[0] + ars[4]); 

请记住ars[0]ars[4]已经是字节,所以不需要将它们转换为字节。

相反,将求和的结果转换为一个字节。

在Java中,两个byte的总和是一个int 。 这是因为,例如,127以下的两个数字可以添加到超过127的数字,并且默认情况下Java几乎对所有数字都使用int

要满足编译器,请将以下行替换为:

 ars[0] = (byte)(ars[0] + ars[4]); 
 public static void main(String args[]){ byte[] ars = {3,6,9,2,4}; ars[0] = (byte)(ars[0] + ars[4]); System.out.println( ars[0] ); } 

这种情况发生的原因是java自动将使用byte和short变量的表达式转换为int …这是为了避免潜在的溢出风险….结果即使结果可能在byte java的范围内提升类型表达式为int

我暂时回过头看这个问题,并收集了所有的调查结果: http : //downwithjava.wordpress.com/2012/11/01/explanation-to-teaser-2/

我们都知道在算术运算期间字节会被转换为整数。 但为什么会这样呢? 因为JVM没有为字节定义的算术指令。 必须先添加字节类型变量,首先将它们“数字化地”提升为“int”类型,然后再添加。 为什么JVM中的字节类型没有算术指令? JVM规范清楚地说:

Java虚拟机为int类型的数据提供最直接的支持。 这部分是为了预期Java虚拟机的操作数堆栈和局部变量数组的有效实现。 它还受到典型程序中int数据频率的推动。 其他整体类型的直接支持较少。 例如,商店,加载或添加指令没有字节,字符或短版本。

请用以下内容替换该行

 ars[0] = (byte)(ars[0]+ars[4]); 
 byte[] ars = {3,6,9,2,4}; ars[0] = (byte) (ars[0] + ars[4]); System.out.println( ars[0] ); 

这将有效,尝试一下

 ars[0] = (byte)(ars[0] + ars[4]);