栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

您正在用自己的方法做什么?如果仅填充现有数组,则不需要.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 pre!}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中。(恐怕前者要比后者更好。有一天,我会去做更新。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号