在类中存储byte []

时间:2017-06-19 11:01:30

标签: java arrays

为了在类中存储字节数组,我只是复制数组还是只传递引用?

E.g。

class MyClass {

    public MyClass(int size, Byte buf[]) {
        this.size = size;
        this.buffer = buf;
    }

    private int size;
    private Byte buffer[];
}

,或者

class MyClass {

    public MyClass(int size, Byte buf[]) {
        this.size = size;
        this.buffer = buf;
    }

    private int size;
    private Byte buffer[] = new Byte[size];
}

,或者

class MyClass {

    public MyClass(int size, Byte buf[]) {
        this.size = size;
        this.buffer = copyOf(buf, 5);
    }

    private int size;
    private Byte buffer[];
}

我很困惑我是否需要真正复制数组或只是存储引用?

3 个答案:

答案 0 :(得分:2)

如果不复制数组,那么对源数组所做的任何更改都将影响类中的新数组。这可能不是你想要的。

另外:您应该使用byte[],而不是Byte[]。 (Bytebyte周围的包装器对象,Byte个对象数组使用的内存比byte基元中的一个更多。

答案 1 :(得分:2)

你需要决定你的合同是什么。

  1. 如果您复制内容,则可以确定调用代码不会意外修改数组,但速度较慢。
  2. 如果你复制内容,它会更快但如果调用代码修改了数组,你的类可能会出现意外行为。
  3. 所以你需要回答这些问题:

    • 某些代码在将数组内容传递给您的类之后是否可以修改它?
    • 如果不正常,你想复制内容还是只是在javadoc中添加一个注释,以记录对数组的任何后续修改可能会破坏该类的事实?

答案 2 :(得分:0)

如果传递引用,则只要原始数组发生更改,阵列就会发生变化。 如果您只想要类中的值,则应选择第二种方法。因为这样两个数组是“分开的”。