黑马程序员技术交流社区

标题: 关于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