黑马程序员技术交流社区

标题: char数组转换为字符串的问题 [打印本页]

作者: adamjy    时间: 2014-4-3 01:47
标题: char数组转换为字符串的问题
本帖最后由 adamjy 于 2014-4-5 20:07 编辑
  1. public class Test {
  2.         
  3.         public static void main(String[] args) {
  4.                 char[] aa = {'a','b','c'};
  5.                 System.out.println(aa.toString());
  6.         }
  7. }
复制代码


为什么程序输出是“[C@32e0c07c”乱码。另外,char数组有什么高效的转为字符串的方法吗?
作者: Engle    时间: 2014-4-3 08:15
aa.toString();方法打印出来的不是乱码,是内存地址。
因为java里面的所有类默认的继承Object,所以这里调用的是Object的toString()方法。
如果你看了源码就明白为什么这么打印了:
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
这里还调用了Integer类中的方法:
public static String toHexString(int i) {
        return toUnsignedString(i, 4);
    }

private static String toUnsignedString(int i, int shift) {
        char[] buf = new char[32];
        int charPos = 32;
        int radix = 1 << shift;
        int mask = radix - 1;
        do {
            buf[--charPos] = digits[i & mask];
            i >>>= shift;
        } while (i != 0);

        return new String(buf, charPos, (32 - charPos));
    }


作者: osully    时间: 2014-4-3 08:42
new String(char[])

作者: lazy_xia    时间: 2014-4-3 09:46
可以试试这个  System.out.println(Arrays.toString(aa));
作者: ╰青青子佩ˊゝ    时间: 2014-4-3 09:57
两点提醒,希望能帮到你,看代码。
  1. public static void main(String[] args) throws IOException{
  2.                 char[] aa = {'a','b','c'};
  3.                 //1.aa.toString()返回的是该数组的内存地址符
  4.                 System.out.println(aa.toString());
  5.                 //2.最好是用下面方法转换
  6.         System.out.println(new String(aa));
  7.         }
复制代码

作者: 请备注    时间: 2014-4-3 13:59
为什么程序输出是“[C@32e0c07c”乱码。另外,char数组有什么高效的转为字符串的方法吗?

那个是哈希值  第一个  [    符号 代表的是数组类型的引用
                    第二个  C   符号 代表数组是char 类型的 ,如果数组里放的是数字  这个 打印的就是I了(int)。
                    @后面的就是数组引用的地址值,aa里面存放的是引用地址值而不是数组内容。




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