Thinking in Java--字符串

来源:互联网 发布:samba for linux下载 编辑:程序博客网 时间:2024/05/17 01:01


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

0 0