在API中关于valueOf和copyValueOf的解释是这样的:
copyValueOf:返回指定数组中表示该字符序列的 String。
valueOf:返回 char 数组参数的字符串表示形式。字符数组的内容已被复制,后续修改不会影响新创建的字符串。
我以为valueOf和copyValueOf方法是有区别的,所以写了以下代码验证:
public class StringTest {
public static void main(String[] args) {
//定义一个简单字符数组,和两个字符串变量
char[] ch = {'a','b','c'};
String str1 =null;
String str2 =null;
//调用string类中valueOf和copyValueOf方法对字符串变量赋值
str1 = str1.valueOf(ch);
str2 = str2.copyValueOf(ch);
System.out.println(str1);
System.out.println(str2);
//修改字符数组中的第一个元素,再看变量是否变化
ch[0] = 'A';
System.out.println(str1);
System.out.println(str2);
}
}
结果运行的结构是这样的:
abc
abc
abc
abc
所以我上网查了资料,得出的结论是:
/**
* 早期的String构造器的实现呢,不会拷贝数组的,直接将参数
* 的char[]数组作为String的value属性。然后 ch[0] = 'A';
* 将导致字符串的变化。为了避免这个问题,提供了copyValueOf方
* 法,每次都拷贝成新的字符数组来构造新的String对象。但是现在的String
* 对象,在构造器中就通过拷贝新数组实现了,所以这两个方面在本质上已经没区别了。
*/
希望论坛中的各位大神指点一下,我得出的结论是到底是不是正确的。 |
|