实际项目中和字符串相关的操作是非常频繁的,常见的有字符串类有String、StringBuffer、StringBuilder对于它们之间的使用方面是需要去理解的
一、String类
String类用来定义字符串常量,java中String类是设计成只读,典型的immutable对象,对它的任何改动其实都是创建了一个新的对象,然后将引用指向该对象,String对象在赋值之后会缓存在常量池中,如果下次申请创建对象时,如果缓存中已经存在,则直接返回引用给创建者
字符串的创建时由堆类分配内存(创建的对象是存储在堆里面)
测试demo
@Test
public void stringDemo(){
String a = new String("ab");
String b = new String("ab");
String aa = "ab"; //放在常量池中
String bb = "ab"; // 从常量池中查找
System.out.println(aa.equals(bb)); // true
System.out.println(aa==bb); // true
System.out.println(a.equals(aa)); // true
System.out.println(a==aa); //false 非同一对象
}
二、StringBuffer
线程安全的,方法由synchronized关键字修饰
三、StringBuilder
线程不安全,效率高
@Test
public void stringDemo1(){
StringBuilder stringBuilder =new StringBuilder("1232323232");
stringBuilder.append("ccccc");
System.out.println(stringBuilder);
}
打印结果:1232323232ccccc
【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展,以下这种方式不推荐
String str = "start";
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
说明:如果你需要一个可修改的字符串,应该使用 StringBuffer 或者 StringBuilder。否则会有大量时间浪费在垃圾回收上,因为每次试图修改都有新的 string 对象被创建出来
StringBuildre的建造者模式
问题:如何进行源码分析???
评论区