您当前的位置:首页 > 互联网教程

Java 在什么情况下要重写toString

发布时间:2025-05-20 23:18:41    发布人:远客网络

Java 在什么情况下要重写toString

一、Java 在什么情况下要重写toString

1、两个都重写toString了吧。你查查JDK的API就知道了。

2、首先说一下,什么情况下要重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。所以当你要想按照你想要的格式去字符串一些对象的时候,就需要重写toString了。比如一个Student对象,直接toString肯定是一个hash码。然而你想得到的比如是:name:***,age:***。这时就重写toString就是在toString里写:System.out.println(“name:”+student.getName);

3、System.out.println(“age:”+student.getAge)。

4、这样再toString就直接反回你想要的格式。

5、通过查api我们就可以知道HashSet的toString是把s的值格式化成[*,*,*],就是给s的加个中括号,而且用逗号分开。

6、而HashMap的toString是把m的值格式化成{key1=value1,key2=value2,key3=value3}

7、所以你打印出来的是那样的格式,这就是重写toString的作用,具体请看api吧。

8、希望你能理解。谢谢,有不懂的再问。

二、java中的toString什么意思toString有什么用

1、toString()是Object的方法,因为所有类都默认继承了Object类,所以也都具有toString()方法,但是并不是通常想要的功能。

2、那现在,需要直接获取到这个Persion对象的数据,可以这样对重写这个toString()方法,如下:

3、return"[name="+ name+", age="+ age+", gender="+ gender+"]";

4、System.out.println(p);//隐式调用toString(0)方法

5、System.out.println(p.toString());//显式调用toString(0)方法

6、字符串在存储上类似字符数组,它每一位单个元素都是能提取的,字符串的零位是它的长度,如s[0]=10,这提供给我们很多方便,例如高精度运算时每一位都能转化为数字存入数组。

7、通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

三、Java重写toString 使之可以输出二维数组

java的标准API中的Array类没有toString方法,因此沿用父类Object的toString方法:

return getClass().getName()+"@"+ Integer.toHexString(hashCode());

而Array类中的方法几乎全是本地方法,可以说Array类就是一个本地类,因此他不受java语法约束,也根本无法用java语法改写toString方法,想要改写这个类实在是太难了,我是不会..

但是你可以使用java.util.Arrays类中的deepToString(Object o[])静态方法,可以实现打印多重数组。

System.out.println(Arrays.deepToString(a));

java设计人员之所以不为Array类设计toString是因为不好确定用什么方式打印数组,是用“【”,还是用“{”,以及要不要“,”等都是问题。

Arrays的deepToString方法如下:

public static String deepToString(Object[] a){

if(a.length!= 0&& bufLen<= 0)

StringBuilder buf= new StringBuilder(bufLen);

deepToString(a, buf, new HashSet());

private static void deepToString(Object[] a, StringBuilder buf,

for(int i= 0; i< a.length; i++){

Class eClass= element.getClass();

buf.append(toString((byte[]) element));

else if(eClass== short[].class)

buf.append(toString((short[]) element));

else if(eClass== int[].class)

buf.append(toString((int[]) element));

else if(eClass== long[].class)

buf.append(toString((long[]) element));

else if(eClass== char[].class)

buf.append(toString((char[]) element));

else if(eClass== float[].class)

buf.append(toString((float[]) element));

else if(eClass== double[].class)

buf.append(toString((double[]) element));

else if(eClass== boolean[].class)

buf.append(toString((boolean[]) element));

else{// element is an array of object references

deepToString((Object[]) element, buf, dejaVu);

} else{// element is non-null and not an array

buf.append(element.toString());

java.lang.reflect.Array类的内容如下,你如果有能力可以改改:

*@(#)Object.java 1.73 06/03/30

* Copyright 2006 Sun Microsystems, Inc. All rights reserved.

* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

private static native void registerNatives();

public final native Class<?> getClass();

public native int hashCode();

public boolean equals(Object obj){

protected native Object clone() throws CloneNotSupportedException;

return getClass().getName()+"@"+ Integer.toHexString(hashCode());

public final native void notify();

public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException{

throw new IllegalArgumentException("timeout value is negative");

if(nanos< 0|| nanos> 999999){

throw new IllegalArgumentException(

"nanosecond timeout value out of range");

if(nanos>= 500000||(nanos!= 0&& timeout== 0)){

public final void wait() throws InterruptedException{

protected void finalize() throws Throwable{}