您可以在 .NET 中使用关键字“ref”来完成此操作。在Java中有什么办法可以做到这一点吗?
你在你的方法中做什么?如果您只是填充现有数组,那么您不需要传递引用语义 - 无论是在 .NET 中还是在 Java 中。在这两种情况下,引用都将按值传递 - 因此对object调用者将可见。这就像告诉别人你家的地址并要求他们送东西到那里一样——没问题。
If you really想要传递引用语义,即调用者将看到对参数本身所做的任何更改,例如将其设置为 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;
}
or:
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;
}
}
欲了解更多详细信息,请阅读C#中的参数传递 http://pobox.com/~skeet/csharp/parameters.html and Java中的参数传递 http://pobox.com/~skeet/java/parameters.html。 (恐怕前者写得比后者好。有一天我会抽出时间进行更新。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)