Java中的String类、StringBuff和StringBuilder

本文详细探讨了Java中的String类,包括其两种实例化方式、字符串相等比较、常量不可变性以及各种字符串操作。接着介绍了StringBuffer,包括其拼接方法、与String类的转换、反转、插入和删除等功能。最后,对比了String、StringBuffer和StringBuilder三大类在内容可变性、线程安全性和效率上的区别。
摘要由CSDN通过智能技术生成

目录

String类

StringBuffer

三大类的区别

String类

1.String类的两种实例化方式

  • 直接赋值
 String str = "Hello,CSDN";
 System.out.println(str);
  • 构造方法(String本身是一个类,类中一定存在构造方法)
String str = new String("Hello,CSDN");
System.out.println(str);
  • 两种方式的区别
String str1 = "hello";
String str2 = "hello";
String str3 = "hello";        //三个str都指向同一块内存空间

原因:在JVM底层自动维护一个字符串对象池(对象数组)

                  如果采用直接赋值的方式进行String类对象的实例化操作,此对象将自动保存到对象池中,如果下次继续采用直接赋值的模式声明String类对象,先去对象池中找是否有指定内容,如果有,直接引用,如果没有,开辟新的空间而后将其保存到对象池中以供下次引用。

String str1 = new String("CSDN"); //产生两块空间,一块堆内存为垃圾空间,并且不会保存到对象池中。

字符串的手工入池操作

String str1 = new String("CSDN").intern();

2.字符串的相等比较

观察如下关于==比较的代码,可以看到,==在进行数值比较时,得到的结果是true,但是在进行对象的比较时,比较的是另个对象所保存的内存地址而非内容,所以得到的结果为false

public class Test {
    public static void main(String[] args) {
//      数值的==比较
        int a=1;
        int b=1;
        System.out.println(a==b);   //true
//      String类对象的==比较
        String str1 = "Hello,CSDN";
        String str2 = new String("Hello,CSDN");
        System.out.println(str1==str2); //false
    }
}

那么如何对两个字符串进行内容上的比较呢,我们采用String类提供的equals方法

public class Test {
    public static void main(String[] args) {
//      String类对象的equals比较
        String str1 = "Hello,CSDN";
        String str2 = new String("Hello,CSDN");
        System.out.println(str1.equals(str2)); //true
    }
}
  • String类的eq
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值