byte [] buff = "Good morning!SIR!".getBytes();
String Test1 = buff.toString();
String Test2 = new String(buff);请问Test1和Test2的内容有什么区别?
toString转换和new一个String转换有什么不同的,为什么Test1和Test2输出结果差那么多?

解决方案 »

  1.   


    public static void main(String args[]) {
    byte [] buff = "Good morning!SIR!".getBytes(); 
    String Test1 = buff.toString(); 
    String Test2 = new String(buff); 

    for(int i=0;i<buff.length;i++) {
    System.out.print((char)buff[i]);
    }
    System.out.println();
    System.out.println(Test2);
    }这样试试, 你只接打印数组的话打印出来的不是他的值,好像是他的
    类对象实例, 我不知道说的对不对
      

  2.   

    String Test1 = buff.toString()使用了byte数组的toString()方法,jdk源代码如下:
    public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    这个方法是在byte数组上调用toString()方法时jdk的默认实现。如你使用
    System.out.println(buff)时,系统将默认调用toString()方法,返回byte数组的字符串表示;
    而String Test2 = new String(buff); 是用这个byte数组来构造一个String实例,他的返回值就是byte数组中的字符串(将每一个数组元素append到一个字符实例),jdk中的实现如下:
    public String(byte bytes[], int offset, int length) {
    checkBounds(bytes, offset, length);
    char[] v  = StringCoding.decode(bytes, offset, length);
    this.offset = 0;
    this.count = v.length;
    this.value = v;
    }
    所以,得到的结果当然不一样了。