gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:43:00 26 4
gpt4 key购买 nike

您可以在 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com