黑马程序员技术交流社区
标题:
关于String类中valueOf和copyValueOf方法区别的解析。
[打印本页]
作者:
东邪
时间:
2015-5-25 23:46
标题:
关于String类中valueOf和copyValueOf方法区别的解析。
在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
* 对象,在构造器中就通过拷贝新数组实现了,所以这两个方面在本质上已经没区别了。
*/
希望论坛中的各位大神指点一下,我得出的结论是到底是不是正确的。
作者:
wwb1105
时间:
2015-5-25 23:50
今天刚学的啊 加油
作者:
东邪
时间:
2015-5-25 23:53
wwb1105 发表于 2015-5-25 23:50
今天刚学的啊 加油
是的,我就是想确认一下是不是因为这个原因。
作者:
飘过的云
时间:
2015-5-25 23:56
好厉害啊,居然是这样,并且在string类中居然可以用值为null的变量去调用方法,学习了,
作者:
黯然残影
时间:
2015-5-26 00:12
学习学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2