20200831-齐元朝
问题
今天早晨上课时,我们用到了Arrays类中的一个类方法
public Static String toString ( object[] o ){}
这个方法是将传入的数组转换成字符串形式
通常我们用这个方法来以字符串形式输出数组,即System.out.println( Arrays.toString() );
今早课上有这么一个用法:
public class Tiger {
private String name ;
private char gender ;
private int age ;
public Tiger(String name, char gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
return "(" + name + "|" + gender + "|" + age + ")";
}
}
public class TigerTest {
public static void main(String[] args) {
Tiger[] tigers = new Tiger[ 4 ];
System.out.println( Arrays.toString( tigers ) );
tigers[ 0 ] = new Tiger( "虎大" , '男' , 10 );
tigers[ 1 ] = new Tiger( "虎二" , '男' , 8 );
tigers[ 2 ] = new Tiger( "虎爸" , '男' , 30 );
tigers[ 3 ] = new Tiger( "虎妈" , '女' , 22 );
System.out.println( Arrays.toString( tigers ) );
}
}
程序运行输出结果如下:
Arrays.toString(array);这个方法是将数组中存储的元素转换成字符串,但在上述例子中,数组的存储情况应该如下:
那么,数组里存储的值是“地址”,那么此时Arrays.toString(array)输出的字符串应该是元素值对应的字符串(一串地址),但是运行结果却是每个元素值指向的对象的变量信息。这是为什么呢?
解决
下午课堂上学习了Arrays类,其中有一个方法sort方法,它在方法内调用了数组元素对应类中实现的compareTo方法
所以我有如下猜测:
在Arrays类的toString方法中,应该有调用元素对应类中重写的toString方法,所以输出数组元素时,自动通过数组元素指向的对象调用了该对象类中的toString方法
于是我将Tiger类中重写的toString方法注释掉,再次运行,结果如下:
可以看到,此时输出数组就输出了一坨类似于地址的东西
而且点开Arrays.toString方法,能找见在方法内部,调用了一个toString,类似于在Arrays.sort中调用了compareTo方法
这个方法里的操作大概就是用String.valueOf把数组里每一个元素指向的对象变成字符串,String类中有重写toString方法,所以输出了数组中每一个元素指向对象的内容
近期评论