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

}

}

2个回答

数组的本质是引用地址,这段代码的本质是修改了每个元素的值,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 数组中。

wojiushiwo945you
毕小宝 回复weixin_44904947: 是的,连写不会报错,分开写报错,所以肯定存在类型转换的。
大约一年之前 回复
weixin_44904947
weixin_44904947 所以 ^=是有隐含的强制转换是吗,我发现b[i] = b[i] + key就会报错
大约一年之前 回复
weixin_39606236
꧁gaoKuo꧂ 回复GaoKuoZ: 这个我大意了 我说错了的 跟这个问题没关系 值容量固定一个字节=.=
大约一年之前 回复
weixin_39606236
꧁gaoKuo꧂ 回复caozhy: 比喻好不代表对,首先数组空间在初始化就已经确定了,无法扩容,其次,数组中的值最大容量在初始化时也确定了,如何容纳更大的数据类型实例呢?
大约一年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 这个比喻很好!可以采纳了
大约一年之前 回复

楼上说的是不对的,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);

wojiushiwo945you
毕小宝 您说的对,这里面有自动类型转换过程。我看题的时候只关注为甚又存入数组中这个点了。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐