java基础---16. String字符串

1 字符串的构造方法和直接创建

/*
java.lang.String类代表字符串
API当中说:Java程序中的所有字符串字面值(如:"abc")都作为此类的实例实现。
其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。)

字符串特点:
1. 字符串的内容永不可变
2. 正因为字符串不可变,所以字符串是可以共享使用的。
3. 字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组。

创建字符串的常见3+1种方式
3种构造方法:
public String():创建一个空白字符串,不含有任何内容。
public String(char[] array):根据字符数组的内容,来创建对应字符串。
public String(byte[] array):根据字节数组的内容,来创建对应字符串。
1种直接创建:
String str = "hello"
 */
public class Demo01String {
    public static void main(String[] args) {
        //使用空参构造
        String str1 = new String();
        System.out.println(str1);//
        //使用字符数组创建字符串
        char[] charArray = {'A','B','C'};
        String str2 = new String(charArray);
        System.out.println(str2);//ABC
        //根据字节数组创建字符串
        byte[] byteArray = {97, 98, 99};
        String str3 = new String(byteArray);
        System.out.println(str3);//abc
        //直接创建
        String str4 = "Hello";
        System.out.println(str4);//Hello
        //注意:str1 str2 str3 str4都是字符串对象(就算str4没有new,也算字符串对象)
    }
}

2 字符串的常量池

/*
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。

对于基本类型来说, ==是进行数值比较。
对于引用类型来说, ==是进行【地址值】的比较
 */
public class Demo02StringPoor {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        char[] charArray = {'a','b','c'};
        String str3 = new String(charArray);

        System.out.println(str1 == str2);//true
        System.out.println(str1 == str3);//false
        System.out.println(str2 == str3);//false
    }
}

在堆内存中有这样一个空间,叫做字符串常量池,双引号直接写上的字符串(str1,str2)在常量池中,字符串常量池中的字符串对象保存的是byte字节数组的地址值。

猜你喜欢

转载自www.cnblogs.com/deer-cen/p/12227945.html