或者它只是引用它?
我有一个由外部库重写的字节数组 - 将它传递给String构造函数是否安全,或者我应该先创建一个克隆?
byte[] b = MagicLib.getData();
String s = new String(b);
// actually a pointer to previous memory, just with different data
b = MagicLib.getMoreData();
答案 0 :(得分:6)
String
包含char
s的数组,而非byte
s。因此,String
无法共享byte
的存储空间。
此外,请注意byte[]
将根据平台默认字符集(根据String(byte[])
上的文档)解码为字符,这进一步意味着byte[]
的解码版本数组必须单独构造。
答案 1 :(得分:0)
在Oracle Java中,它根据使用的解码字符集返回一个新的char []
答案 2 :(得分:0)
Java String
是不可变的,因此必须复制整个数组。否则,您可以通过修改String
数组来更改byte
的内容。