Java:如何通过引用传递byte []?
您可以使用关键字“ ref”在.NET中进行操作。用Java有什么办法吗?
回答:
您正在用自己的方法做什么?如果仅填充现有数组,则不需要.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 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#和参数传递在Java中。(恐怕前者要比后者更好。有一天,我会去做更新。)
以上是 Java:如何通过引用传递byte []? 的全部内容, 来源链接: utcz.com/qa/404222.html