13 字符串
13.2 重载“+”和StringBuilder
在循环中使用“+”连接字符串每次进行连接时都会创建一个新的StringBuilder,所以,多次拼接字符串不要使用重载的“+”,改用StringBuiler.append()方法,但如果在append方法中又使用了“+”拼接字符串,那编译器就会调入陷阱,从而为你创建另一个StringBuilder对象处理括号内的字符串操作。
13.3 无意识递归
所有容器类都覆写了toString()方法,使得生成的String能够表达容器自身和容器所包含的对象。
public class InfiniteRecursion{
public String toString(){
return "InfiniteRecursion address:"+this+"\n";
}
}
如果你创建上面这个类的对象,并试图打印出来,将会得到非常长的一串异常,因为这里发生了自动类型转换,编译器会自动调用this.toString()方法,从而发生递归调用。如果要打印对象地址,应该采用Object的toString()方法,不应调用this,而应调用super.toString()方法。
13.5.3 Formatter类
在java中,所有新的格式化功能都由java.util.Formatter类处理,可以将Formatter类看成一个翻译器,它将格式化的字符和数据翻译成结果,当创建一个Formatter对象时,需要向它的构造器传递一些信息,高速它最终结果应该向哪里输出。
String name = "233";
Formatter f = new Formatter(System.out);
f.format("my name is %s \n",name);
将把结果输出到System.out。
最常用的传入参数是一个PrintStream,OutputStream和File。
13.5 Formatter转换
类型转换符 | 结果 |
---|---|
d | 整数型(十进制) |
c | Unicode字符 |
b | Boolean数值 |
s | String |
f | 浮点数 |
% | 字符“%” |
13.5.6 String.format()
当只需要使用format()方法一次时,String.format()用起来很方便。