String类学习

需求:使用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]




参考资料:Java编程思想


猜你喜欢

转载自blog.csdn.net/pipiang/article/details/80782911