Java错误:可能会损失精度

mpe*_*ter 6 java byte bytearray

我正在制作一个小型Java程序来加密任何类型的文件.我正在这样做的方法如下:我打开输入文件,在与该文件大小相同的字节数组中读取它,然后进行编码,并将整个数组写入名为output的.dat文件. DAT.要索引字节数组,我使用的是int类型的变量.代码:

        for(int i : arr) {
            if(i>0) {
                arr[i] = arr[i-1]^arr[i];
            }
        }
Run Code Online (Sandbox Code Playgroud)

'arr'是一个与输入文件大小相同的字节数组.

我得到的错误:CodingEvent.java:42:错误:可能会丢失精度

arr [i] = arr [i-1] ^ arr [i];

(^运算符上的箭头点)

必需:字节

发现:int

怎么了?请问你能帮帮我吗?

T.J*_*der 7

结果byte ^ byte是反直觉的int.将表达式的结果分配回时,请对表达式的结果使用强制转换arr[i]:

arr[i] = (byte)(arr[i-1]^arr[i]);
Run Code Online (Sandbox Code Playgroud)

这是因为运算符被定义为对其操作数进行二进制数字提升,因此它实际上正在做的(在这种情况下)是:

arr[i] = (int)arr[i-1]^(int)arr[i];
Run Code Online (Sandbox Code Playgroud)

...自然导致int.这就是我们需要退回的原因.