java-String类总结

一、String类

需要注意的是:

    1)字符串的底层实现都是字符数组,缺陷就是长度固定。在字符串常量定义后,它的内容不可改变。

    2) 所有使用“”定义的内容,本质上都是String类的匿名对象,保存在堆上。

1、两种对象实例化方式:

      直接赋值 :String str = "hello world";

      构造法:String str = new String("hello world") ; 

      问题:String类中两种对象实例化的区别?

          1)直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。

          2)构造方法:开辟两块堆内存空间,其中一块成为垃圾空间,字符串对象不会自动保存到对象池中,可以使用

intern()方法手动入池。

请看代码示例:

public static void main(String[] args) {
    String str1 = "hello world";
    String str2 = new String("hello world");
    System.out.println(str1 == str2);        //false
    
    String str3 = new String("hello world").intern();
    System.out.println(str1 == str3);    //true
    //其中 == 号比较的是二者的地址
}

现象分析:字符串对象str1存放在字符串对象池,而str2在堆上并没有入池,所以两者不相等;字符串对象str3通过intern()方法手动入池,此时发现“hello world”对象已存在,因此不再重复放入,而是直接引用。

2、字符串比较(重要):

    1)equals()    返回值true/false

    2)equalsIgnoreCase()    返回值true/false

    3)compareTo()    返回值:相等返回0,小于返回值小于0,大于返回值大于0

    问题:String类中使用 "== "与 equals() 的区别?

     1)"==":进行数值比较,比较的是两个字符串对象的内存地址数值,而不是字符串的内容。

     2)equals():字符串内容的比较。

3、字符数组和字符串的相互转化(重要):

     1)public String(char value[])    构造方法,将字符数组中的所有内容转化为字符串

     2)public String(char value[],int offset,int count)    构造方法,将字符数组中的部分内容转化为字符串

     3)public char charAt(int index)    取得指定索引位置的字符

     4)public char[] toCharArray()    将字符串转化为字符数组返回

public static void main(String[] args) {
    String str = "hello world";

    //字符串转化为字符数组
    char[] charArray = str.toCharArray();
    for (char i:charArray) {
        System.out.println(i);
    }

    //字符数组转字符串
    System.out.println(new String(charArray));
    System.out.println(new String(charArray,0,5));
}

4、字符串拆分(重要):

将一个完整的字符串,按照指定的分隔符划分为若干个子字符串。

public static void main(String[] args) {
    String str1 = "Jack:25|Marry:20";
    String[] strArr = str1.split("\\|");
    for (int i = 0; i < strArr.length; i++) {
        String[] temp = strArr[i].split(":");
        System.out.println(temp[0]+" = "+temp[1]); 
    }  
}
//结果:  
//    Jack = 25
//    Marry = 20

5、字符串相关操作方法(方法比较多只罗列部分常用的):

1)字节与字符串:public string(byte bytes[])    构造方法,字节数组变为字符串

2)字符串查找:contains()、indexOf()

3)字符串截取:substring()

4)去掉字符串前后空格:trim()    

5)字符串大小写转换:toUpperCase()、toLowerCase()

6)字符串连接:concat()    

7)字符串长度:Length()

8)字符串是否为空串:isEmpty()  注意判断的不是null,而是长度为0


二、StringBuffer类

由于String类字符串不可更改特性,因此提供了方便字符串修改的StringBuffer类。

注意:String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:

      1) String变为StringBuffer:利用StringBuffer的构造方法或append()方法

      2) StringBuffer变为String:调用toString()方法。

1、连接:append()

2、反转:reverse()

public class Demo {
    public static void main(String[] args) {
        //连接
        StringBuffer str = new StringBuffer();
        str.append("hello").append("world");
        System.out.println(str);
        //反转
        System.out.println(str.reverse());
    }
}
//结果:
//    helloworld
//    dlrowolleh

3、删除指定范围的数据:delete(int start, int end)

4、插入数据:insert(int offset, 各种数据类型 b)

问题:String 、StringBuffer 、StringBuilder的区别和联系

    1)StringBuffer 有线程安全关键字 synchronized,在多线程情况下使用,而 StringBuilder 和 String 都没有,在单线程情况下使用。

    2)在拼接上:String每次都会产生新的空间,而 StringBuffer 和 StringBuilder 调用 append() 方法,不会产生新的空间

    3)对于 String 的拼接,底层被优化为 StringBuilder.append()拼接,结果将会调用 StringBuilder 的 toString()输出。

你可能感兴趣的:(java知识点)