Java常用类之String类知识清单,简单易理解

String类基础知识

1、String类表示字符串,理解为不可变的字符序列

2、String类声明为final,不可被继承

3、String类实现了Serializable接口:表示字符串是支持序列化的(序列化:可将java对象转变为二进制文件,从而传输这个java对象)

4、String类实现了 Comparable接口:表示字符串可以比较大小

5、底层用final char[]  value存储

String类对象的创建方式

1、字面量方式

String s1="abcd"

该方式首先在栈空间里声明了一个String类型变量s1,然后在方法区中的常量池里存储abcd,将存储地址值(Ox0001)赋给s1,使s1指向abcd

Java常用类之String类知识清单,简单易理解_第1张图片

 

2、构造器方式

String s2=new String(“abcd”);

该方式首先在栈空间里声明了一个String类型变量s2,然后在堆空间开辟一片空间,将该空间的地址值(Ox1111)赋给s2,使s2指向它。在方法区中的常量池里存储abcd,将存储地址值(Ox0001)赋给value属性,使它指向abcd

Java常用类之String类知识清单,简单易理解_第2张图片

图中所示地址值均为假设地址值

其余类创建对象只有构造器方式

字符串的连接运算

1、str="aaa"+"bbb"

字符串常量和字符串常量连接后依然存在于常量池中,而常量池中相同的数据只存在一份。

因此若连接后的数据(aaabbb)已经在常量池中存在,就将该地址赋给接收它的变量(str)

若不存在,将在常量池中开辟空间存储连接后的数据(aaabbb),将新开辟的地址赋给接收它的变量(str)

2、str=s1+"bbb"

字符串变量和字符串常量连接后,先在堆空间new一个对象,将该对象的地址赋给接收它的变量(str),再让该对象指向常量池。因此,无论连接后的数据是否在常量池中存在,连接后的变量(str)指向的都是堆空间中对象的地址

2、str=s1+s2

字符串变量和字符串变量的连接,同2。

代码示例:

public class StringTest {
    public static void main(String[] args) {
        String s1="aaa";
        String s2="bbb";
        String s3="aaabbb";
        String s4="aaa"+"bbb";
        System.out.println(s3==s4);//true,常量池中相同的数据只存在一份,因此s4被赋上的是s3的地址
        String s5=s1+"bbb";
        System.out.println(s3==s5);//false,只要有一个是变量,就相当于在堆空间new了一个对象,该对象再指向常量池。因此s5被赋上的是堆空间中new出来的对象的地址
        String s6=s1+s2;
        System.out.println(s5==s6);//false,两个都是变量,就相当于在堆空间new了一个对象,该对象再指向常量池。因此s6被赋上的是堆空间中new出来的对象的地址
        System.out.println(s3==s6.intern());//true,intern()方法返回常量池中的存储地址
    }
}

Java常用类之String类知识清单,简单易理解_第3张图片

 

String类的常用方法举例:

public class StringTest2 {
    public static void main(String[] args) {
        String str="Hello World";
        System.out.println("该字符串的长度是:"+str.length());//包括空格
        System.out.println("下标为1的字符是:"+str.charAt(1));
        System.out.println("该字符串是否为空:"+str.isEmpty());
        System.out.println("全部转换为小写:"+str.toLowerCase());
        System.out.println("全部转换为大写:"+str.toUpperCase());
        str="     Hello   World    ";
        System.out.println("去掉首尾空格:"+str.trim());
        String s1="Hello World";
        String s2=new String("Hello World");
        System.out.println("s1和s2的地址值是否相同:"+(s1==s2));//==比较地址值
        System.out.println("s1和s2的内容是否相同:"+s1.equals(s2));//equals比较内容
    }
}

Java常用类之String类知识清单,简单易理解_第4张图片

 

equalsIgnorCase(object anObject):忽略大小写之后比较字符串内容是否相同

concat(String str):拼接字符串

compareTo(String anotherString):比较字符串大小

substring(int beginIndex):从指定索引处截取子串

startsWith(String prefix):是否以指定子串开始

endsWith(String suffix):是否以指定子串结束

contains(String str):是否包含子串

indexOf(int ch):返回子串第一次出现的索引,没有出现过返回-1

lastIndexOf(int ch):返回子串最后一次出现的索引,没有出现过返回-1

replace(char oldChar,char newChar):用新字符代替旧字符

matches(String regex):按正则表达式进行匹配

split(String regex):按正则表达式将字符串拆分成字符串数组

将String型转化为int型

Integer.parseInt(str)

将int型转化为String型

String.valueOf(i)   或  i+""             

你可能感兴趣的:(java,java)