A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在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
* 对象,在构造器中就通过拷贝新数组实现了,所以这两个方面在本质上已经没区别了。
*/

希望论坛中的各位大神指点一下,我得出的结论是到底是不是正确的。

4 个回复

倒序浏览
今天刚学的啊  加油
回复 使用道具 举报
wwb1105 发表于 2015-5-25 23:50
今天刚学的啊  加油

是的,我就是想确认一下是不是因为这个原因。
回复 使用道具 举报
好厉害啊,居然是这样,并且在string类中居然可以用值为null的变量去调用方法,学习了,
回复 使用道具 举报
学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马