String与StringBuilder类

StingStringBuilder

今天重温了一下String类🥱

想起来自己看书理解的时候觉得有些晦涩难懂 这个类在Java中被单独划出去了 不同于C/C++

特此复习🍃

String类简述:

  • 在程序设计中经常涉及处理字符序列有关的算法,为此Java专门提供用来处理字符序列的String
  • String类在java.lang包中,被系统默认引入
  • 需要注意的是⚠️:JavaString类定义为final类,因此用户不能拓展String类,即String类不能有子类

构造String对象:

String对象被习惯的翻译为字符串对象

  • 常量对象:

    用双引号括起来的字符序列
    String a = "你好"
    String a = "boy"
    

    JavaString常量放入常量池(简单理解:常量池的数据在程序运行期间再也不允许改变)

  • String对象:

    可以使用String类声明并创建对象
    String s =new String("hi");
    String t =new String("hi");
    

    new运算符每次都要开辟新天地,但凡用new构造出的对象都不在常量池中

  • 引用String常量

    String常量是对象,因此可以把String常量的引用赋值给一个String对象
    String s1,s2;
    s1 = "你好";
    s2 = "你好";
    

    4

  • 不可变对象🙅

    举例:

    String s = "hello";
    s = "hello world"
    好像string 重新赋值就变了,但是 对象的不可变性是指对象本身的数据不会改变 
    将变量重新赋值是创建了一个新对象,然后将新对象的引用赋值给变量 
    

String对象的并置

字符串类是一个比较特殊的类,他是Java中唯一重载运算符的类!(Java不支持运算符重载,String是特例 )🌟

类型一:赋值号的右边是两个常量运算(使用StringBuilder

String testOne = "你"+"好";
//被优化为---->
String testOne = "你好";

​ 在编译原理中,有常量优化技术,常量折叠是一种Java编译器使用的优化技术
​ 可能会被编译器优化为StringBuilder来减少对象创建(对象频繁创建时很费时间同时占内存的!)

//使用StringBuilder
String str1="你";
String str2="好";
String result=(new StringBuilder(String.valueOf(str1))).append(str2).toString();
//使用StringBuilder,会采用类似于第一种实现,显然会更快!

类型二:赋值号的右边有变量

String testTwo = you+hi;
//you + hi相当于new String("你好")

会在动态区产生新对象!
5


StringBulider的一点点拓展啦🤏:

StringBuilder也是一个类,但是它能够存储可变长度的字符串!它支持在字符串末尾增加

StringBuilder builder=new StringBuilder();
builder
       .append("a")
       .append("bc")
       .append("d");   //链式调用
String str = builder.toString();
System.out.println(str);

重写的append方法:

 @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;//因为返回的是自己所以支持链式调用
    }

4

5

posted on 2022-05-13 16:39  AcherLoveCode  阅读(23)  评论(0编辑  收藏  举报

导航