为了账号安全,请及时绑定邮箱和手机立即绑定

基础类型是值传递,变量data为什么值被改变了?

  1. byte[] data = new byte[1024];//创建字节数组,指定接受的数据包的大小

  2. System.out.println(data);

  3. DatagramPacket datagramPacket = new DatagramPacket(data, data.length);

  4. //3.接受客户端发送的数据

  5. System.out.println("服务器机即将启动,等待客户端的连接");

  6. datagramSocket.receive(datagramPacket);//此方法在接受到数据包之前会一直阻塞

  7. System.out.println(data);// ??? data值改变

  8. System.out.println(datagramPacket.getData());

  9. //4.读取数据

  10. String info = new String(data, 0, datagramPacket.getLength());

  11. System.out.println("我是服务端,客户端说:" + info);

第7行data值发生了改变???


正在回答

3 回答

我觉得真正对data数组动手脚的应该是receive方法 会不会是返回一个data数组覆盖了前面定义的数组呢?

0 回复 有任何疑惑可以回复我~

datagramSocket.receive(datagramPacket);这里获取到了数据包,data值当然会变啊。详细代码说明:https://blog.csdn.net/ljcgit/article/details/81450491

0 回复 有任何疑惑可以回复我~

首先第一点:在java里,只有值传递。

你可能是刚学完c语言吧。你的面向对象思想还需要加强。

data指向的是一个一个字节数组,如果在data数组作为参数的方法里,改变data数组的指向(也就是指向另一片内存),自然不会改变data数组的值(不会改变原来内存的值)。但是,改变的是data数组里的元素,这就是直接修改data数组指向的内存的值了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

基础类型是值传递,变量data为什么值被改变了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信