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编程思想


C++的string是C++标准库中提供的一个用于处理字符串的。它提供了一系列成员函数和操作符重载,使得字符串的操作更加方便和高效。 string的特点包括: 1. 动态内存管理:string会自动管理字符串的内存,无需手动分配和释放内存。 2. 可变性:string对象可以随时修改其内容,包括插入、删除、替换等操作。 3. 字符串操作:string提供了丰富的字符串操作函数,如查找、比较、连接、截取等。 以下是一些常用的string成员函数和操作符重载: 1. 构造函数:可以使用不同的方式创建string对象,如默认构造函数、拷贝构造函数、从C风格字符串构造等。 2. 赋值操作:可以使用赋值运算符=将一个string对象赋值给另一个对象。 3. 连接操作:可以使用+运算符将两个string对象连接起来。 4. 访问字符:可以使用下标运算符[]或at()函数来访问字符串中的单个字符。 5. 获取长度:可以使用length()或size()函数获取字符串的长度。 6. 查找子串:可以使用find()函数在字符串中查找指定的子串。 7. 插入和删除:可以使用insert()函数在指定位置插入字符或子串,使用erase()函数删除指定位置的字符或子串。 8. 截取子串:可以使用substr()函数截取指定位置和长度的子串。 9. 比较字符串:可以使用比较运算符==、!=、<、>等来比较两个字符串的大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值