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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马浩 中级黑马   /  2012-5-14 11:08  /  1644 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String类中有 个valueOf(char[] data)和copyValueOf(char[] data)方法,这两个方法有什么区别啊

4 个回复

倒序浏览
我觉得你最大的疑问应该在char数组上吧?比如
  char[] test = new char[]{'a','b','c'};
  String a = String.valueOf(test);
  String b = String.copyValueOf(test);
有什么区别?答案:没有任何区别!

首先你得知道,String的底层是由char[]实现的:通过一个char[]类型的value属性!早期的String构造器的实现呢,不会拷贝数组的,直接将参数的char[]数组作为String的value属性。然后
  test[0] = 'A';
将导致字符串的变化。为了避免这个问题,提供了copyValueOf方法,每次都拷贝成新的字符数组来构造新的String对象。但是现在的String对象,在构造器中就通过拷贝新数组实现了,所以这两个方面在本质上已经没区别了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
打印结果都一样:
char[] c ={'1','0'};
sop(String.copyValueOf(c)); //10
sop(String.valueOf(c)); //10
回复 使用道具 举报
源碼:
————copyValueOf(char[] data)
public static String copyValueOf(char data[]) {
        return copyValueOf(data, 0, data.length);
    }
public static String copyValueOf(char data[], int offset, int count) {
        // All public String constructors now copy the data.
        return new String(data, offset, count);
    }
————valueOf(char[] data)
public static String valueOf(char data[]) {
        return new String(data);
    }
沒區別,真要說區別就是字符串構造的時候采用的構造器區別
回复 使用道具 举报
        valueOf(char[] data):返回 char 数组参数的字符串表示形式。一个新分配的字符串,它表示包含在字符数组参数中的相同字符序列。
        字符数组的内容已被复制,后续修改不会影响新创建的字符串。
        copyValueOf(char[] data):返回一个指定数组中表示该字符序列的 String,它包含字符数组的字符。后续修改可能会影响该字符串。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马