我有一个字节数组,我想复制/克隆,以避免调用代码修改我的内部表示。
如何克隆java字节数组?
答案 0 :(得分:39)
JLS 6.4.5 The Members of an Array Type
数组类型的成员是以下所有成员:
public final field length
,其中包含数组的组件数(长度可以是正数或零)。public
方法clone
,它会覆盖类Object
中同名方法,并且不会抛出任何已检查的异常。数组类型T[]
的克隆方法的返回类型是T[]
。- 所有成员都继承自班级
Object
;Object
唯一未被继承的方法是clone
方法。
因此:
byte[] original = ...;
byte[] copy = original.clone();
请注意,对于参考类型数组,clone()
基本上是 shallow copy 。
此外,Java没有多维数组;它有数组数组。因此,byte[][]
是Object[]
,并且还受浅拷贝的约束。
请注意,clone()
会返回 new 数组对象。如果您只想将值从一个数组复制到现有数组,则可以使用例如System.arraycopy
还有java.util.Arrays.copyOf
允许您创建具有不同长度的副本(截断或填充)。
答案 1 :(得分:10)
System.arraycopy(src,0,dst,0,src.length);
答案 2 :(得分:7)
这很简单,这是一个好主意。
byte[] copy = arr.clone();
请注意,clone()
数组方法的返回类型是数组的类型,因此不需要强制转换。
答案 3 :(得分:2)
为了避免可能的Null Pointer Exception,我使用以下语法:
byte[] copy = (arr == null) ? null : arr.clone();