1. 程式人生 > 實用技巧 >第六章:常用類

第六章:常用類

一、java.lang.String類

1.1、String類的概述

1.1.1、圖示

1.1.2、說明

String:字串,使用一對""引起來表示。

  ① String宣告為final的,不可被繼承;

  ② String實現了Serializable介面:表示字串是支援序列化的。

  ③ 實現了Comparable介面:表示String可以比較大小

  ④ String內部定義了final char[] value用於儲存字串資料

  ⑤ 通過字面量的方式(區別於new給一個字串賦值,此時的字串值宣告在字串常量池中)。

  ⑥ 字串常量池中是不會儲存相同內容(使用String類的equals()比較,返回true)的字串的。

1.2、String的不可變性

1.2.1、說明

  ① 當對字串重新賦值時,需要重寫指定記憶體區域賦值,不能使用原有的value進行賦值。

  ② 當對現有的字串進行連線操作時,也需要重新指定記憶體區域賦值,不能使用原有的value進行賦值。

  ③ 當呼叫String的replace()方法修改指定字元或字串時,也需要重新指定記憶體區域賦值,不能使用原有的value進行賦值。

1.2.2、示例

package com.zixue.java;

import org.junit.Test;

/**
 * @author Mr Guo
 * @create 2020-12-21 15:01
 */
public class StringTest { @Test public void test1(){ String s1 = "abc";//字面量的定義方式 String s2 = "abc"; s1 = "hello"; System.out.println(s1 == s2);//比較s1和s2的地址值 System.out.println(s1);//hello System.out.println(s2);//abc System.out.println("*****************"); String s3
= "abc"; s3 += "def"; System.out.println(s3);//abcdef System.out.println(s2);//abc System.out.println("*****************"); String s4 = "abc"; String s5 = s4.replace('a', 'm'); System.out.println(s4);//abc System.out.println(s5);//mbc } }

1.2.3、圖示

1.3、String類的例項化

1.3.1、兩種方式

方式一:通過字面量定義的方式

方式二:通過new + 構造器的方式

1.3.2、程式碼示例

Person.java:

package com.zixue.java;

/**
 * @author Mr Guo
 * @create 2020-12-21 15:15
 */
public class Person {
    String name;
    int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

StringTest.java:

package com.zixue.java;

import org.junit.Test;

/**
 * @author Mr Guo
 * @create 2020-12-21 15:01
 */
public class StringTest {
    @Test
    public void test1(){
        //通過字面量定義的方式:此時的s1和s2的資料javaEE宣告在方法區中的字串常量池中。
        String s1 = "javaEE";
        String s2 = "javaEE";
        //通過new + 構造器的方式:此時的s3和s4儲存的地址值,是資料在堆空間中開闢空間以後對應的地址值。
        String s3 = new String("javaEE");
        String s4 = new String("javaEE");

        System.out.println(s1 == s2);//true
        System.out.println(s1 == s3);//false
        System.out.println(s1 == s4);//false
        System.out.println(s3 == s4);//false

        System.out.println("***********************");
        Person p1 = new Person("Tom",12);
        Person p2 = new Person("Tom",12);

        System.out.println(p1.name.equals(p2.name));//true
        System.out.println(p1.name == p2.name);//true

        p1.name = "Jerry";
        System.out.println(p2.name);//Tom
    }
}

效果:

1.3.3、圖示

1.3.4、面試題

String s = new String("abc");方式建立物件,在記憶體中建立了幾個物件?

  兩個:一個是堆空間中new結構,另一個是char[]對應的常量池中的資料:"abc"