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