JAVA问题:byte类型数组里的值和int型的值运算过后为什么还能存放在byte类型数组中?

public class t2 {
public static void main(String[] args) {

   int key = 100;
   byte[] b =new byte[100];

   for (int i = 0; i < b.length; i++) {
    b[i] ^= key;
    //在异或过程中b[i]转成int类型和key运算后为什么还能存放在byte数组中呢?
}

}

}

数组的本质是引用地址,这段代码的本质是修改了每个元素的值,new byte[] 初时字节数组中每个元素都是默认值 0。然后用 for 循环修正数组中每个元素的值为 0 和 100 的亦或值。

java规定在做运算时,会有一个自动类型转换,byte short char 在和 int 运算时都会提升成int后,再运算,结果为int;此时再赋值给 byte 类型会有一个强转过程: b[i] ^= key; 里面有一个强制转换过程,等价于:(byte) (s[0]^key);

其实本质上是byte 和 int 运算的结果强制转换成了 byte ,所以可以存入 byte 数组中。

楼上说的是不对的,byte数组无法容纳int类型的值

    public static void main(String[] args) {
                int key = 1025;
                System.out.println((byte)(0^key));
                byte[] b =new byte[100];
                for (int i = 0; i < 1; i++) {
                    b[i] ^= key;
                    System.out.println(b[i]);
                }
    }

执行结果为:
1
1
实际上,类似于"+=","^="这种运算符是包含了类型的隐式转换的,放入数组的仍然是byte
b[i] ^= key;这一行代码相当于b[i]=(byte)(0^key);