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数组中呢?
}
}
}
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 数组中。