您可以在 .NET 中使用关键字“ref”来执行此操作。 Java有什么办法吗?
最佳答案
你在你的方法中做了什么?如果您只是填充现有数组,那么您不需要传递引用语义 - 无论是在 .NET 中还是在 Java 中。在这两种情况下,引用都将通过值传递 - 因此对 object 的更改将对调用者可见。这就像告诉别人你家的地址,然后让他们送货上门——没问题。
如果您真的想要传递引用语义,即调用者将看到对参数本身所做的任何更改,例如将其设置为 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 . (恐怕前者比后者写得好。总有一天我会抽空做一个更新。)
关于Java:如何通过引用传递字节 []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/333151/