String 的相关知识点

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);

猜你喜欢

转载自blog.csdn.net/qq_32573251/article/details/82824526