Java:如何通过引用传递byte []?

您可以使用关键字“ref”在.NET中执行此操作。有没有办法在Java中这样做?
你在做什么呢?如果你只是填充一个现有的数组,那么你不需要传递引用的语义 – 无论是在.NET还是Java中。在这两种情况下,引用将通过值传递 – 所以调用者将可以看到对象的更改。这就像告诉某人你的房子的地址,并要求他们提供一些东西 – 没有问题。

如果您真的想要传递参考语义,即呼叫者将看到对参数本身做出的任何更改,例如,将其设置为null或引用不同的字节数组,则任一方法都需要返回新值,或者需要将引用传递给某种“持有者”,其中包含对字节数组的引用, (可能改变的)参考文献从后面获取。

换句话说,如果你的方法看起来像这样:

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 code!
}

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;
    }
}

有关更多细节,请阅读Parameter passing in C#Parameter passing in Java.(前者比后者更好写,恐怕有一天我会轮到做更新。)

相关文章
相关标签/搜索