Java基础>17 - String 类、字符串内存分析,常用方法

学习总结:
链接:【Java基础、springboot、springcloud、docker 等,学习目录】

String 类:

文本字符串序列。任何 " " 都是String 类的对象。

一、创建String对象的两种方式:

1、直接 " ",“hello”, “Ron”。
2、new 关键字,new String(“hello”);

字符串的比较:

public class Demo {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = new String("Hello");
        String str4 = new String("Hello");

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

内存分析:
Java基础>17 - String 类、字符串内存分析,常用方法_第1张图片
1、String str1 = “Hello”; 先检查字符串常量池中是否存在 “Hello” 这个对象,如果不存在则创建一个"Hello" 对象(即:图中第一步),并返回地址;如果存在则直接返回地址。
2、String str2 = “Hello”; 此时字符串常量池中已经有 “Hello” 这个对象,则直接返回地址值(即:图中第三步)。
3、String str3 = new String(“Hello”); 该语句会创建两个对象。首先检查字符串常量池中是否存在 “Hello” 字符串对象,如果不存在则创建一个再返回地址值,如果存在则直接返回地址值;new String 语句会在堆内存中开辟一片空间,用于存放new 出来的对象;将字符串常量池中的“Hello” 内容拷贝到堆内存中对象中,返回堆内存的地址到str3,所以此步骤总用有两个对象。

二、String 常用方法:

1、构造方法:
a、String():空构造。
b、String(byte[] bytes):使用字节数组创建字符对象。

byte[] bytes = {97, 98, 99, 100};
String s = new String(bytes);
System.out.println(s);  // abcd

c、String(char[] value):使用字符数组构建一个字符串。
d、String(String str):初始化一个字符串对象,使其表示一个与参数相同的字符序列。

注意: 字符串初始化完毕后其值不能发生变化。String str = “abc”; 那么 “abc” 就是一个对象,其值一直都是 “abc” ,
分析:
a、String 类底层封装了一个字符数组,private final char value[];
String str = “abc”; 等效:
char data[] = {‘a’, ‘b’, ‘c’};
String str = new String(data);
即:直接赋值是将 “abc” 字符串先转成对应的字符数组,然后转为字符串。
b、被 private 修饰的这个数组外界不可以访问,也就意味着字符串一旦被赋值后无法改变。
c、String str = “abc”; String str = “Ron”; 仅仅改变的是str 记录的地址值,“abc” 这个字符串还在。

2、获取方法:

String str = "中国人民解放军";
System.out.println(str.length());    // 7   长度
System.out.println(str.charAt(3));   // 民  特定位置字符
//System.out.println(str.charAt(9)); // StringIndexOutOfBoundsException: 角标越界
System.out.println(str.indexOf("ron"));  // -1  指定字符串第一次出现的位置 没有返回 -1
System.out.println(str.indexOf("人民"));  // 民
System.out.println(str.lastIndexOf("人民")); // 民 指定字符串最后一次出现的位置 没有返回 -1

3、判断方法:

String str = "How`s it going? Ron";
System.out.println(str.endsWith("n"));  // true 以什么结尾
System.out.println(str.contains("Ron")); // true 是否包含
System.out.println("Ron".equalsIgnoreCase("ron")); // true 忽略大小写

4、转换方法:

a、String(char[] value):将字符数组转为字符串。
b、char[] toCharArray():将字符串转为字符数组。
c、byte[] getBytes():将字符串转为字节数组。

5、其他方法:

a、String replace(char oldChar, char newChar):替换
b、String[] split(String regex):切割
c、String substring(int beginIndex):指定开始索引位置截取子串。
d、String substring(int beginIndex, int endIndex):指定开始、结束索引位置截取子串。
e、toUpperCase():转大写。
f、toLowCase():转小写。
g、trim():去除首尾空格。

你可能感兴趣的:(Java基础)