Java编程思想第十三章---字符串
1.不可变的String
字符串对象是不可变的。String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。
2 重载“+”与StringBuilder
用于String的“+”与“+=”是Java中仅有的两个重载过的操作符,而java并不允许程序员重载任何操作符。
1.String对象是不可变的,你可以给一个String对象加任意多的别名.因为String对象具有只读特性,所以指向它的任何引用都不可能改变它的值.
2.不可变性会带来一定的效率问题,为String对象重载的"+“操作符就是一个例子.
3. String的”+“操作经过编译器优化后是利用的StringBuilder对字符串进行拼接,性能不如直接使用StringBuilder拼接字符串要好.
4. 多个String对象的”+"操作有可能会创建多个StringBuilder来拼接.
3 无意识的递归
想打印对象的内存地址,在toString()方法中不能使用this关键字的返回字符串,this关键字会转换为String对象,从而递归调用toString()方法,会抛出异常.
解决方案: 使用super.toString()方法打印内存地址.这里的super父类是Object类.
4 String上的操作
String类的大多数方法,当需要改变字符串的内容时,方法都返回一个新的String对象;如果内容没有改变方法仅仅返回指向原字符串对象的引用。
5.格式化输出
printf( ) 这和C语言中的一样,使用%d、%f、%s等占位符,但C语言中不能拼接字符串,Java可以。
format()和printf( )一样,printf()调用了format()方法
7 扫描输入
Scanner的构造器可以接受任何类型的输入对象,包括File对象、InputStream、String或者Readable对象。Readable是Java SE5中新加入的一个接口,表示“具有read()方法的某种东西”。有了Scanner,所有的输入、分词以及翻译的操作都隐藏在不同类型的next方法中。普通的next()方法返回下一个String。所有的基本类型(除char之外)都有对应的next方法,包括BigDecimal和BigInteger。所有的next方法,只有在找到一个完整的分词之后才会返回。Scanner还有相应的hasNext方法,用以判断下一个输入分词是否所需的类型。