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