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

来源:4-3 编程实现基于 UDP 的 Socket 通信之客户端

Kuneng

2018-08-02 17:49

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

  • 阿Dine
    2019-03-23 20:27:49

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

  • qq_蜡笔没了小新_10
    2018-08-06 18:28:26

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

  • Max_Cooper
    2018-08-06 17:18:31

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

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

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

Java Socket应用---通信是这样练成的

分享的是 Java 中的网络编程,使用Socket实现网络聊天通信

125013 学习 · 590 问题

查看课程

相似问题