weixin_44904947 2019-04-22 23:20 采纳率: 0%
浏览 538

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条回答

  • 毕小宝 博客专家认证 2019-04-23 09:55
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器