Java打印charArray.toString() 后续补充如何重写

Java的默认toString()方法返回的对象表示对开发者来说意义不大,常常需要重写。文章介绍了当打印charArray.toString()时得到的是内存地址,而非预期内容。建议使用System.out.println(new String(someArray))或String.valueOf(someArray)来获得期望的字符串表示,并解释了这些方法的工作原理。同时提到了Arrays.toString()方法如何生成格式化的数组字符串。

把char 数组中的内容打印出来:

Object类具有一个toString()方法,你创建的每个类都会继承该方法。它返回对象的一个String表示,并且对于调试非常有帮助。然而对于默认的toString()方法往往不能满足需求,需要覆盖这个方法

public class Test
{
    public static void main(String[] args)
    {
        char[] someArray = { 'J', 'A', 'V', 'A' };
        System.out.println(someArray.toString());
    }
}

 结果并不如预想那样,打印出JAVA,结果是”[C@24c21495″。
看toString的源码:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

函数返回一个字符串,这其中包含::类名+@+哈希值的16进制形式

  • toHexString(int i)方法:

以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式

返回对象的字符串形式的地址值。对我们来说没有任何意义;所以通常情况,我们都会重写该方法

或者用:

1)  System.out.println(new String(someArray));

2)  System.out.println(String.valueOf(someArray));都可以

因为 String.valueOf()的源码为:

public static String valueOf(char data[]) {
    return new String(data);
}

代码示例: 

import java.util.Arrays;
public class demo {
    public static void main(String[] args) {
        int [] arr={3,4,5,6,7};
       System.out.println(Arrays.toString(arr)) ;

    }
}

Arrays.toString()的源码为:分析可知,对toString()进行了重写,生成字符串[3,4,5,6,7]

注意:可以看源码,转化的字符串由”[", "a[i]",", "以及']' 组成。

public static String toString(int[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

参考:https://blog.csdn.net/zhuyu_deng/article/details/8723762 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值