当前位置: 首页 > 面试题库 >

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

尹俊雅
2023-03-14
问题内容

您可以使用关键字“ 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中。(恐怕前者要比后者更好。有一天,我会去做更新。)



 类似资料:
  • 问题内容: 这两个代码有什么区别: 代码A: 哪里 VS. 代码B: 这两个代码之间有什么区别吗? 问题答案: Java始终按值传递参数,而不按引用传递参数。 让我通过一个例子解释一下: 我将逐步解释这一点: 声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的type的新对象”f”。 从方法方面,声明Foo具有名称的类型引用,a并将其初始分配给null。 调用方法时changeRe

  • 问题内容: 是否可以通过Java通过引用传递对象 就像在C#中一样 问题答案: 不,这在Java中是不可能的。 在Java中,方法的所有参数均按值传递。注意非原始型的的变量,它们是对对象的引用,也由值来传递:在这种情况下, 参考 是 由值来传递 。请注意,按值传递引用与按引用传递不同。

  • 问题内容: 因此,我正在阅读这篇文章,并没有回复。2.在该示例中,调用该方法后,地址42处的Dog值是否更改为Max? 问题答案: Java通过值传递- 始终 为基元和对象传递值。 就对象而言,传递的是对存在于堆中的对象的引用。当传入引用时,方法不能更改该引用所指向的内容。 如果该引用指向具有可变数据的对象,则该方法可以更改其状态。 摘自Ken Arnold和James Gosling撰写的“ J

  • 问题内容: 我希望有人可以为我澄清这里发生的事情。我在整数类中挖了一下,但是由于整数 覆盖 了运算符,所以我无法弄清楚出了什么问题。我的问题是这条线: 这是我的推理:我知道java通过值传递(或通过reference的值传递),因此我认为在下面的示例中,整数对象应每次递增。 这是我的预期输出: 这是实际输出。 为什么会这样? 问题答案: 有两个问题: 整数是通过值而不是通过引用传递的。在方法内部更

  • 问题内容: 通过此链接:如何通过引用传递变量?我们知道,Python在将字符串(作为不可变类型变量)作为参数传递给函数时会复制它,但是我认为如果字符串很大,它将浪费内存。在许多情况下,我们需要使用函数来包装一些字符串操作,所以我想知道如何使其更有效? 问题答案: Python不会复制传递给函数的对象(包括字符串): 如果您需要“修改”函数中的字符串,请返回新字符串并将其分配回原始名称: 不幸的是,

  • 问题内容: Python文档似乎尚不清楚参数是通过引用还是通过值传递,并且以下代码会产生未更改的值“原始” 我可以做些什么来通过实际引用传递变量吗? 问题答案: 传入的参数实际上是对对象的引用(但引用是通过值传递的) 有些数据类型是可变的,但有些则不是 所以: 如果将可变对象传递给方法,则该方法将获得对该对象的引用,并且可以对其进行突变,但是如果您将该引用重新绑定到该方法中,则外部作用域对此一无所