黑马程序员技术交流社区

标题: 关于String类 [打印本页]

作者: 马浩    时间: 2012-5-14 11:08
标题: 关于String类
String类中有 个valueOf(char[] data)和copyValueOf(char[] data)方法,这两个方法有什么区别啊
作者: —__    时间: 2012-5-14 11:28
我觉得你最大的疑问应该在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对象,在构造器中就通过拷贝新数组实现了,所以这两个方面在本质上已经没区别了
作者: 小小企鹅    时间: 2012-5-14 12:21
打印结果都一样:
char[] c ={'1','0'};
sop(String.copyValueOf(c)); //10
sop(String.valueOf(c)); //10

作者: niceBoy    时间: 2012-5-14 13:52
源碼:
————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);
    }
沒區別,真要說區別就是字符串構造的時候采用的構造器區別
作者: 彩虹    时间: 2012-5-19 01:08
        valueOf(char[] data):返回 char 数组参数的字符串表示形式。一个新分配的字符串,它表示包含在字符数组参数中的相同字符序列。
        字符数组的内容已被复制,后续修改不会影响新创建的字符串。
        copyValueOf(char[] data):返回一个指定数组中表示该字符序列的 String,它包含字符数组的字符。后续修改可能会影响该字符串。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2