【JAVA】char[]的输出,以及对char[]是否为一个类的疑惑

本文探讨了在Java中使用`System.out.println`打印`char[]`时的输出现象,通过debug源码发现,由于`+`运算符的作用,实际调用了`Object`类的`toString`方法,导致输出了类名和哈希值,而非预期的字符。遗留问题在于[C类的含义,它实际上代表了`char`数组。
摘要由CSDN通过智能技术生成
   char[] c = {'1', '2'};
        System.out.println(c);
        System.out.println(c + "");

Output:

debug进行源码分析:

System.out.println(c);

public void println(char x[]) {
    synchronized (this) {
        print(x);
        newLine();
    }
}
public void print(char s[]) {
    write(s);
}

System.out.println(c + "");

public StringBuilder() {
    super(16);
}
AbstractStringBuilder(int capacity) {
    value = new char[capacity];
}
/*对这一步有点不理解
obj的类型为Object, 但是值为char[] = {1, 2}
难道char[]也能算作一个对象吗*/
public StringBuilder append(Object obj) {
    return append(String.valueOf(obj));
public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
/*注意这一步,Object类的toString并没有返回字符*/
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

总结

因为运算符【+】的存在,且操作数之一为String(""),导致调用了Object类(char[]属于Objectl类?存疑)的toString方法,返回了class名和hash值,而非字符

遗留问题

 System.out.println(c.toString());

的确跳转到了Object类的toString,getClass().getName()返回了【[C】

[C是什么类?char[]吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值