1.不可变的String
tips:对于一个方法而言,参数是为了该方法提供信息的,而不是想让该方法改变自己的。
jdk源码中,都是返回一个新的对象,而不是原来的对象。传递的是引用的一个拷贝,引用指向的对象没有改变。
2.重载“+”和StringBuilder
重载操作符:Java中不允许程序员重载操作符,c++中允许。Java中,用于String类型的“+”和“+=”是仅有的重载操作符。什么叫做重载操作符?用在特定类上,赋予不同含义的操作符。
在Java编译器中(编译器可以优化代码),使用了StringBuilder来优化代码,所以StringBuilder效率比String高。StringBuffer,Java SE5以前的,线程安全的,开销大。tips:如果要在toString()中中使用循环,最好自己创建一个StringBuilder对象,不然编译器会在循环内部重复创建StringBuilder对象。
3.无意识的递归
在toString()方法中调用return “something”+this;会循环调用toString()方法,注意使用super.toString()。
4.String上的操作
当需要改变字符串时,返回一个新对象,如果没有改变时,返回指向原对象的引用。
5.格式化输出
1.format 2.Formatter类,%s表示插入的是String类型的。转换成boolean类型是,和其他语言有区别。3.String.format()
6.正则
Scanner类:在结束的时候回抛出IOException异常,不需要显式抛出异常。
StringTokenizer类:在String支持正则、Scanner类之前。目前基本不在用。