天天看点

String类

String

1.子串

substring(a,b)可以从一个字符串中提取一个子串,a表示提取的开始位置,b表示结束位置

String s="hello";
String s2=s.substring(0,3);
System.out.println(s2);      
2.拼接

在java中可以用+连接两个字符串,在输出语句中常用

String s="hello";
System.out.println("我想你和你说:"+s);      

String类中的静态join方法,也可以实现字符串的拼接

String s3 = String.join("/","A","B","C");
System.out.println(s3);
//A/B/C      
3.不可变字符串

String类是没有办法修改字符串中某个字符的办法,如果想要修改字符串某一个位置的数值,只能用上述两个办法,先提取子串再进行拼接

4.检测字符串是否相等
String str = "hello";
String str2 = "HELLO";
System.out.println(str.equals(str2));
//false
System.out.println(str.equalsIgnoreCase(str2));
//true      

equals()判断两个字符串是否相等,equalsIgnoreCase()判断两个字符串是否相等不区分大小写

比较两个字符一定不要使用==来检测是否相等

String c4=new String("hello");
String c5=new String("hello");
System.out.println(c4==c5);//false
String c6="hello";
String c7="hello";
System.out.println(c6==c7);//true      

在使用new关键词创建对象时,jvm会在堆中创建一个对象,将对象的地址引用给c4,每创建一个对象都会重复一次上述操作,所以c4,c5两个是指向不同的地址,c4==c5比较的是两个地址是否相同,所以输出false。c6指向的是字符串常量池中的”hello“,c7指向的也是字符串常量池的”hello“,所以他们两个地址相同,输出的是true。

StringBuilder

public class String11 {
    public static void main(String[] args) {
        String s = "abc";//不可变字符串
        StringBuilder stringBuilder = new StringBuilder();//底层char类型数组长度为16
        StringBuilder sb = new StringBuilder("abc");//可变字符串
        sb.append("qqqqqqqqqq");//将内容添加到abc之后
        sb.append("qqqqqqqqqqaaaaaaaaaaaaa");//位置不够要对数组进行扩容
    }
}      
String类

stringbuilder底层就是一个char类型的数组,count表示数组中被占用的数量

StringBuilder底层原理

String s不可变:在s中不改变地址的情况下,没有办法把s的值变成别的值

StringBuilder可变:在value中地址不变的情况下,可以一直往value数组中添加字符,一旦value数组不够用了,就进行数组的扩容,然后在扩容后的数组中在添加

StringBuffer