String类的总结

看完String类后自己的一些小结,与大家一起 共勉
在这里插入图片描述
在上图中写到了第一种情况,接下来从第二种情况开始讨论
(2)String str3=“ZH”;
分析如下语句:System.out.println(str1str3)
分析:String str3=“ZH”;语句也是直接赋值语句,存在常量池中,因为String str1=“ZH”,即:常量池中已经有相同的(”ZH“)了,直接将常量池中已有的拿来赋给str3,因此该语句打印的结果为true.
(3)String str4=“H”+“Z”;
分析如下语句:System.out.println(str4
str1);
分析:String str4=“H”+“Z”;语句也是直接赋值语句,与前面情况不同的是存在,赋给它的是两个量的拼接。拼接后的值认为“ZH”,依然在常量池中,因为String str1=“ZH”,即:常量池中已经有相同的(”ZH“)了,直接将常量池中已有的拿来赋给str4,因此该语句打印的结果为true.
(4)String str5=“Z”;
String str6=str5+“H”;
分析如下语句:System.out.println(str6str1);
分析:在执行String str6=str5+“H”;语句时,str5是一个变量,因此该语句打印false.
(5)String str7=“Z”+new String(original:“H”);
(注:String str8=new String(original:“Z”)+new String(original:“H”)与之类似)
分析如下语句:System.out.println(str7
str1);
分析:由前面的图可以看出:”Z“和new出来的"H"在堆上,将"H"给value[],然后得到的和"Z"进行拼接,拼接后会产生一个新的地址,该地址即为str7的内存地址。因此该语句打印出的结果为false。
(6) String str9=new String(original:“girl”).intern();
String str10=“girl”;
分析如下语句:System.out.println(str9str10);
分析:intern()方法表示手动入池,即:原本new 出来的在堆上,但是经过手动入池后,将其放到了常量池中,即此时它在常量池中的位置就是str9的内存地址。String str10=”girl”,是直接赋值语句,然而常量池中已经有了girl,直接将常量池中已有的拿来赋给str10,因此该语句打印的结果为true.
(7)String str11=new String(original(:” “+”ZH”).intern();
分析如下语句:System.out.println(str11
str1);
同(·6)一样进行了手动入池。

若是要进行内容的比较,则使用equals方法比较。str1.equals(str2)
需要注意的是:str1不能为null,若str1为null,则会发生空指针异常

重点:
String, StringBuffer, StringBuilder的区别和联系
(1):String, StringBuffer, StringBuilder类都被final关键字修饰。
(2):StringBuffer方法前有synchronized, synchronized是保护线程安全的关键字,但是StringBuilder和String没有。因此:StringBuffer在多线程情况下使用。String和StringBuilder单线程情况下使用。
(3)StringBuffer 和StringBuilder调用append进行拼接,返回的是当前对象的引用,不会产生垃圾空间。String进行拼接时每次都会产生新的空间。

(4)String的拼接底层被优化为StringBuilder,然后调用append方法进行拼接,最后的结果会调用StringBuilder的toString()方法,将其转化为String型。

无意识的递归:
Java中的每个类从根本上都是继承自Object.因此容器类都有toString()方法,并且覆写了该方法,使得它生成的String结果能够表达容器自身,以及容器所包含的对象。
注:当需要改变字符串的内容时,String类的方法都会返回一个新的String对象。同时,如果内容没有发生改变,String的方法只是返回原对象的引用而已。这可以节约空间以及避免额外的开销。

字符串的比较有三种方法:
(1).public Boolean equals(Object anobject),区分大小写的比较
例:

public class ArrayListDisply {
    public static void main(String[] args) {
      String  str1="Everything will Be Better";
      String str2=" everything will be better";
        System.out.println(str1.equals(str2));
    }

}

在这里插入图片描述
(2)public Boolean equalsIgnoreCase(String anotherString).不区分大小写的比较
例:

public class ArrayListDisply {
    public static void main(String[] args) {
      String  str1="Everything will Be Better";
      String str2="everything will be better";
        System.out.println(str1.equalsIgnoreCase(str2));
    }

}

在这里插入图片描述
(3)public int compareTo(String anotherString) 比较两个字符串大小关系
情况一:若长度相等,并且字符串里有多个不一样字符,则以第一个不一样的为准,比较它们的ACSII码值,输出其差值。
例:

public class ArrayListDisply {
    public static void main(String[] args) {
      String  str1="Everything will Be Better";
      String str2="everything will be better";
        System.out.println(str1.compareTo(str2));
    }

}

在这里插入图片描述
情况二:若两个字符串长度不相同,长度长的大,输出结果为他们长度的差值
例:

public class ArrayListDisply {
    public static void main(String[] args) {
      String  str1="Everything will Be Better";
      String str2="Everything will Be";
        System.out.println(str1.compareTo(str2));
    }

}

在这里插入图片描述
字符串的拆分:
public String[] split(String regex) 若是分隔* ^ : | . \都要加\转义。
字符与字符串之间一些常用的操作
(1) public String(char value[]) 将字符数组中的所有内容变为字符串
(2) public String(char value[],int offset,int count) 将部分字符数组中的内容变为字符串
(3) public char charAt(int index) 取得指定索引位置的字符,索引从0开始
(4) public char[] toCharArray() 将字符串变为字符数组返回。
例:

public class Zongjie {
    public static void main(String[] args) {
        String str="I am so lovely";
        char[] c=str.toCharArray();
        for(int i=0;i<c.length;i++){
            System.out.print(c[i]+" ");

        }
        System.out.println();
        System.out.println(new String(c));
        System.out.println();
        System.out.println(new String(c,4,3));
    }
}

在这里插入图片描述
字符串截取:
(1) public String substring(int beginIndex) 从指定索引截取到结尾
(2) Public String substring(int beginIndex,int endIndex) 截取部分内容
其他一些常用的字符串操作方法:
(1)public String trim() 取掉字符串的左右空格保留中间空格。
(2)pulic String toUpperCase() 字符串转大写
(3)public String toLowerCase() 字符串转小写
(4)public native String intern() 字符串入池操作
(5)public String concat(String str) 字符串连接,不入池
(6)public int length() 取得字符串的长度
(7)public Boolean isEmpty() 判断是否为空字符串,不是NULL,而是长度为0
例:

扫描二维码关注公众号,回复: 5947320 查看本文章
public class Zongjie {
    public static void main(String[] args) {
        String str="    I am so lovely     ";
       String str2="Happy";
        System.out.println(str.trim());
        System.out.println(str.toUpperCase());
        System.out.println(str.toLowerCase());
        System.out.println(str.concat(str2));
        System.out.println( str.length());
        System.out.println(str.isEmpty());
    }
}

在这里插入图片描述
重点:String和StringBuffer的相互转化
(1) String转化为StringBuffer:

  1. 构造方法
    StringBuffer sringBuffer=new StringBuffer(str);
  2. 使用append()方法。
    (2) StringBuffer转化为String
    调用toString()方法。

猜你喜欢

转载自blog.csdn.net/weixin_42373873/article/details/89294719