Thinking in Java--字符串


1.String:(只需要明白两点)

①String对象是不可变的

②String类方法中所有对String对象的修改都是通过新建一个String对象来完成的

2.“+”重载与StringBuilder:

①用于String的“+”和"+="是Java中仅有的两个重载过的操作符,而Java并不允许程序员重载任何操作符

②StringBuilder是个更高效的类,特别是体现在String对象的"+"操作上,因为”+“操作是通过新建一个String对象来形成最终结果的。

而如果出现多次使用”+“操作的循环情形,将会产生多个中间String对象,造成效率低下。幸运的是,StringBuilder的append方法能够很好

的解决效率低下的问题。我们只需要在循环”+“操作前新建一个StringBuilder,之后的所有"+"操作通过append方法来代替,最后调用toString

方法就可以了。

【注意:append( a + ":" + b ),是个不好的操作,因为你已经创建了一个StringBuilder对象处理括号内的字符串操作】

【拓展:StringBuilder还提供了丰富的方法:insert、replace、substring、reverse、(最常用的append、toString);

如果你已经知道字符串大概有多长,那预先制定StringBuilder的大小可以避免多次重新分配缓冲,一定程度上提高了效率】

3.无意识的递归(通过例子来说明):

import java.util.*;
public class InfiniteRecursion {
	public String toString() {
		return " InfiniteRecursion address: " + this + "\n";
	}
	public static void main( String[] args ) {
		List<InfiniteRecursion> v =  new ArrayList<InfiniteRecursion>();
		for ( int i = 0; i < 10; ++i )
			v.add( new InfiniteRecursion() );
		System.out.println( v );
	}
}
在这个例子里面,由于toString里面的(String+this+String)(+this)已经调用了toString,如此递归调用下去

【拓展:想要打印出对象的内存地址,应该调用Object.toString()方法】

4.格式化字符串和格式化说明符

①format()与printf()是等价的,不过String.format()方法可以用于PrintStrrem、PrintWriter

②%s对应String

③【precision】应用于String是,它表示打印String是输出字符的最大数量,应用于整数会触发异常

④%b应用于其它各种类型时的情况:

对于boolean基本类型或者Boolean对象,只要参数不为null,那转换的结果永远都是true,即使数字0的转换结果依然为true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值