您正在用自己的方法做什么?如果仅填充现有数组,则不需要.NET或Java中的按引用传递语义。在这两种情况下,引用都将按值传递-因此对 对象的
更改将由调用者看到。这就像告诉某人您的住所地址,并要求他们向其提供物品-没问题。
如果您 确实
需要传递引用语义,即调用方将看到对参数本身所做的任何更改,例如将其设置为null或对其他字节数组的引用,则这两种方法都需要返回新值,或者需要传递对某种“
holder”的引用,该“ holder”包含对字节数组的引用,并且稍后可以从中获取(可能已更改)引用。
换句话说,如果您的方法如下所示:
public void doSomething(byte[] data){ for (int i=0; i < data.length; i++) { data[i] = (byte) i; }}那你就好了 如果您的方法如下所示:
public void createArray(byte[] data, int length){ // Eek! Change to parameter won't get seen by caller data = new byte[length]; for (int i=0; i < data.length; i++) { data[i] = (byte) i; }}那么您需要将其更改为:
public byte[] createArray(int length){ byte[] data = new byte[length]; for (int i=0; i < data.length; i++) { data[i] = (byte) i; } return data;}要么:
public class Holder<T>{ public T value; // Use a property in real pre!}public void createArray(Holder<byte[]> holder, int length){ holder.value = new byte[length]; for (int i=0; i < length; i++) { holder.value[i] = (byte) i; }}欲了解更多详情,请阅读参数传递的C#和参数传递在Java中。(恐怕前者要比后者更好。有一天,我会去做更新。)


![Java:如何通过引用传递byte []? Java:如何通过引用传递byte []?](http://www.mshxw.com/aiimages/31/486375.png)
