基礎類型是值傳遞,變量data為什么值被改變了?
byte[] data = new byte[1024];//創建字節數組,指定接受的數據包的大小
System.out.println(data);
DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
//3.接受客戶端發送的數據
System.out.println("服務器機即將啟動,等待客戶端的連接");
datagramSocket.receive(datagramPacket);//此方法在接受到數據包之前會一直阻塞
System.out.println(data);// ??? data值改變
System.out.println(datagramPacket.getData());
//4.讀取數據
String info = new String(data, 0, datagramPacket.getLength());
System.out.println("我是服務端,客戶端說:" + info);
第7行data值發生了改變???
2019-03-23
我覺得真正對data數組動手腳的應該是receive方法 會不會是返回一個data數組覆蓋了前面定義的數組呢?
2018-08-06
datagramSocket.receive(datagramPacket);這里獲取到了數據包,data值當然會變啊。詳細代碼說明:https://blog.csdn.net/ljcgit/article/details/81450491
2018-08-06
首先第一點:在java里,只有值傳遞。
你可能是剛學完c語言吧。你的面向對象思想還需要加強。
data指向的是一個一個字節數組,如果在data數組作為參數的方法里,改變data數組的指向(也就是指向另一片內存),自然不會改變data數組的值(不會改變原來內存的值)。但是,改變的是data數組里的元素,這就是直接修改data數組指向的內存的值了。