String(byte [])是否创建了字节数组的深层副本?

时间:2014-08-21 15:06:40

标签: java arrays string

或者它只是引用它?

我有一个由外部库重写的字节数组 - 将它传递给String构造函数是否安全,或者我应该先创建一个克隆?

byte[] b = MagicLib.getData();
String s = new String(b);

// actually a pointer to previous memory, just with different data
b = MagicLib.getMoreData(); 

3 个答案:

答案 0 :(得分:6)

String包含char s的数组,而非byte s。因此,String无法共享byte的存储空间。

此外,请注意byte[]将根据平台默认字符集(根据String(byte[])上的文档)解码为字符,这进一步意味着byte[]的解码版本数组必须单独构造。

答案 1 :(得分:0)

在Oracle Java中,它根据使用的解码字符集返回一个新的char []

答案 2 :(得分:0)

Java String是不可变的,因此必须复制整个数组。否则,您可以通过修改String数组来更改byte的内容。