版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32573251/article/details/82824526
@Date:2018年08月17日13:18:44
- 为什么String final不可变
String值是保存在常量池中,一旦创建是无法修改的。好处:a.线程安全,b.支持字符串常量池数据共享,节省资源,提高效率(因为如果已经存在,这个常量就不会再创建,直接拿来用)
- String、StringBuffer、StringBuilder区别
区别 | String | StringBuilder | StringBuffer |
---|---|---|---|
对象类型 | 字符串常量 | 字符串常量 | 字符串常量 |
是否线程安全 | 不安全 | 不安全 | 安全 |
大致执行效率 | 低 | 高 | 中 |
使用场景 | 操作少,数据少 | 单线程,操作多,数据多 | 多线程,操作多,数据多 |
- 无意识的递归
如下代码:发生了自动类型的转换。将people类型转换成String类型,因为编译器看到一个String对象后面跟着一个“+”,而后面的对象不再试String,于是编译器试着将this转成一个String。通过调用this.toString方法,于是就发生了递归调用。
若想打印对象的内存地址,应该调用Object.toString()方法。
public class people{
public String toString(){
ruturn "people name is "+ this + "";
}
}
-
当需要改变字符串内容时,String类的方法都会返回一个新的String对象。如果内容没有发生改变,String的方法只是返回指向原对象的引用而已。可以节约存储空间以及避免额外的开销
-
格式化输出
是System.out.printf 不是 System.out.print。那些占位符称作格式修饰符
所有新的格式化功能都有java.util.Fromatter类处理:可以将Formatter看做是一个翻译器,将格式化字符串与数据翻译成需要的结果
%s、%d、%f 分别为格式化字符串、整型、浮点型
System.out.printf("today is %d",6);
System.out.format("after day is %d",1);