java里,所有的类,不管是java库里面的类,或者是你自己创建的类,全部是从object这个类继承的。object里有一个方法就是toString(),那么所有的类创建的时候,都有一个toString的方法。

  这个方法是干什么的呢?

  首先我们得了解,java输出用的函数print();是不接受对象直接输出的,只接受字符串或者数字之类的输出。那么你想把一个创建好的对象拿来输出怎么办?例如:

package com.spring.h3;

public class Test2 {
public static void main(String[] args) {
System.out.println("new Test2()==="+new Test2());
//输出结果为:new Test2()===com.spring.h3.Test2@18a992f
}
}

  按照print接受的类型来说,s1是不能直接输出的,那么是否代表这个是不能编译运行的呢?当然不是。因为当print检测到输出的是一个对象而不是字符或者数字时,那么它会去调用这个对象类里面的toString 方法,输出结果为[类型@哈希值]。Object类中的toString()方法的源代码如下:

/**
* Returns a string representation of the object. In general, the
* <code>toString</code> method returns a string that
* "textually represents" this object. The result should
* be a concise but informative representation that is easy for a
* person to read.
* It is recommended that all subclasses override this method.
* <p>
* The <code>toString</code> method for class <code>Object</code>
* returns a string consisting of the name of the class of which the
* object is an instance, the at-sign character `<code>@</code>', and
* the unsigned hexadecimal representation of the hash code of the
* object. In other words, this method returns a string equal to the
* value of:
* <blockquote>
* <pre>
* getClass().getName() + '@' + Integer.toHexString(hashCode())
* </pre></blockquote>
*
* @return a string representation of the object.
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

  而数组类中并没有对此方法重写(override),仅仅是重载(overload)为类的静态方法(参见java.util.Arrays)。所以,数组直接使用toString()的结果也是[类型@哈希值]。

  所以数组转为字符串应写成:

Arrays.toString(a) 

  这种方法的toString()是带格式的,也就是说输出的是[a, b, c],如果仅仅想输出abc则需用以下两种方法:

  方法1:直接在构造String时转换。

char[] data = {'a', 'b', 'c'};
String str = new String(data);

  方法2:调用String类的方法转换。

String.valueOf(char[] ch)

  参考资料:

  [1] http://www.hqhome.net/java/303.html

  [2] http://blog.163.com/lixueyu1004@126/blog/static/50282494201111597090/

【Java】数组不能通过toString方法转为字符串的更多相关文章

  1. Java数组的十大方法

    Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5 ...

  2. Java数组操作十大方法 (转)

    定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c&q ...

  3. Java Object类的toString()方法

    Java只要定义一个类,那么它都在继承,没有说明它在继承哪个类的时候,则默认继承java.lang.Object类,也就是说Object类是所有类的父类.看下面一段代码. public class O ...

  4. Java将科学计数法数据转为字符串

    如果Excel单元格数据类型为数值,数字太长会变成科学计数法,Java读取的时候使用如下方法可将其转为字符串 BigDecimal bd = new BigDecimal("3.000085 ...

  5. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...

  6. Java 中equals和toString()方法重写

    1,equals方法 (1)什么时候需要重写? 如果希望不同内存但相同内容的两个对象equals时返回true,则需要重写equals (2)怎么重写? class A { public int i; ...

  7. Java Object类中toString方法的重写

    Object类中的tostring方法的: 当我们输出一个对象时,实际是输出的是这个类中的tostring方法,是一个地址值,而不是类中的属性. 1 一:子类没有重写Object类中的toStrinn ...

  8. ES6学习总结二(数组的四个方法,字符串)

    数组 1 map 映射 一个对一个 如:分数数组[34,56,78,99]映射为[不及格,不及格,及格,及格]; 等级数组[23,56,89]映射为 [ {name:'lmx',level:1,rol ...

  9. Java数组去掉反复的方法集

    经经常使用到,有时候不仅仅是简单的基本类型,那种能够用set集合去重,好多时间用到的是我们自己定义的类型,以下举个样例(我这儿就那int举例了): 方法一. 这样的类似与选择排序算法,首先我们取i值, ...

随机推荐

  1. bzoj 4503

    没有权限号就只能对拍了 我们令?代表的T值=0,然后设出这样一个式子 这样一来,只要T和S在j位置匹配,当且仅当Dj=0,然后我们将这个式子拆开,变成下面那样 思路大概就是这样 最后发现答案应该是在a ...

  2. Color the ball HDU1556

    这题整整debug了两个小时 不同组居然要初始化  本以为built函数里面已经初始化好了!!!!! 其他无需注意 #include<cstdio> #include<cstring ...

  3. 【Java】 剑指offer(15) 数值的整数次方

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 实现函数double Power(double base, int ...

  4. 009 使用servlet API作为参数

    1.哪些可以使用 MVC中的Handler方法可以接受ServletAPI类型的参数. 2.controller package com.spring.it; import java.io.IOExc ...

  5. 为什么要编译Linux内核?

    新的内核修订了旧内核的bug,并增加了许多新的特性.如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译Linux内核. 通常,更新的内核会支持更多的硬件,具 ...

  6. python模块——PrettyTable

    python模块——PrettyTable 一. 简介 Python通过prettytable模块将输出内容如表格方式整齐输出,可用来生成美观的ASCII格式的表格,十分实用. python本身并不内 ...

  7. 【Ray Tracing The Next Week 超详解】 光线追踪2-7 任意长方体 && 场景案例

    上一篇比较简单,很久才发是因为做了一些好玩的场景,后来发现这一章是专门写场景例子的,所以就安排到了这一篇 Preface 这一篇要介绍的内容有: 1. 自己做的光照例子 2. Cornell box画 ...

  8. 5288: [Hnoi2018]游戏

    5288: [Hnoi2018]游戏 链接 分析: 考虑y<=x的怎么做,那么只能从左边走到右边.我们可以从最右边的点开始,一次确定每个点往右边可以走多少. L[x],R[x]分别是x向左向右最 ...

  9. [BZOJ4987]Tree

    题目大意: 给定一棵\(n(n\le3000)\)个点的带边权的树,找出\(k\)个点\(A_{1\sim k}\)使得\(\sum_{1\le i<k} dis(A_i,A_i+1)\)最小. ...

  10. zabbix 官方文档

    https://www.zabbix.com/documentation/3.4/manual