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);