需求:使用toString方法时将对象数组的地址打印出来
这个横简单代码如下
public class info{
public static void main(String[] args)
{
List<info> list = new ArrayList<>();
for(int i=0;i<5;i++)
{
list.add(new info());
}
System.out.println(list);
}
}
运行输出:
[test.info@52e922, test.info@25154f, test.info@10dea4e, test.info@647e05, test.info@1909752]
这就是我想要得到的效果。在打印输出时会调用info对象的toString方法继承自Object的toString
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
我们还知道一点
public class info{
public void getinfo()
{
System.out.println(this);
}
public static void main(String[] args)
{
new info().getinfo();
}
}
运行输出
test.info@52e922
打印this会自动调用对象的toString方法。
根据以上我们可以自定义toStirng 使得toStirng输出自定义的信息
我们修改代码
public class info{
//重写方法
public String toString()
{
return "自定义信息"+this;
}
public void getinfo()
{
System.out.println(this);
}
public static void main(String[] args)
{
List<info> list = new ArrayList<>();
for(int i=0;i<5;i++)
{
list.add(new info());
}
System.out.println(list);
}
}
预期输出:
[自定义信息test.info@52e922, 自定义信息test.info@25154f, 自定义信息test.info@10dea4e, 自定义信息test.info@647e05, 自定义信息test.info@1909752]
实际输出: 造成了递归调用这时因为用this在拼接字符串时调用了当前对象的toString方法
Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at java.lang.StringBuilder.<init>(StringBuilder.java:113)
at test.info.toString(info.java:36)
而我们实际想调用的是Object的toString
知道了这个原因再次修改代码
public class info{
//将this去掉
public String toString()
{
return "自定义信息"+super.toString();
}
public void getinfo()
{
System.out.println(this);
}
public static void main(String[] args)
{
List<info> list = new ArrayList<>();
for(int i=0;i<5;i++)
{
list.add(new info());
}
System.out.println(list);
}
}
运行结果符合预期
[自定义信息test.info@52e922, 自定义信息test.info@25154f, 自定义信息test.info@10dea4e, 自定义信息test.info@647e05, 自定义信息test.info@1909752]