1.字符串的特点


一旦定义,长度和内容均不可改变!!!

2.String如何创建字符串


2.1 字面量方式

  1. String str = "我爱中国!";

2.2 new

String str02 = new String("我爱中国");

2.3 区别

String类 - 图1
字面量的定义方式, 数据直接存放在元空间的静态常量池中,而new String() 需要借助堆来实现

2.4 示例

private static void stringstudy() {
        // TODO Auto-generated method stub
        String str = "我爱中国!";
        String str02 = new String("我爱中国!");
        //地址不一样,str在元空间,str02 在堆中
        System.out.println(str == str02);
        System.out.println(str.equals(str02));
        // == 比较地址的值,equals 用来比较具体的内容
        //如下这句话只有1个对象:我爱中国!
        String str03 = "我爱" + "中国!";
        System.out.println(str == str03);
        //以下代码是创建了3个对象:我爱   中国     我爱中国!
        String str04 = "我爱";
        String str05 = "中国!";
        String str06 = str04 + str05;
        System.out.println(str == str06);
//        //字符
//        char a = '中';
//        //字符串就是多个字符构成的东西
//        char[] strs = new char[5];
//        strs[0] = '我';
//        strs[1] = '爱';
//        strs[2] = '中';
//        strs[3] = '国';
//        strs[4] = '!';
//        System.out.println(Arrays.toString(strs));
    }

3.String类常用API

private static void stringstudy02() {
        // TODO Auto-generated method stub
        String str = " 2020-12-12 ";
        //获得字符串的长度length()
        System.out.println(str.length());

        //判断字符串中是否包含某一个字符
        System.out.println(str.contains("!"));

        //获得某一个字符在字符串的位置(-1代表不存在)
        System.out.println(str.indexOf("!",4));

        //返回某一个下标所在的字符
//        System.out.println(str.charAt(3));

        //判断某个字符串是否为""字符串
        System.out.println(str.isEmpty());

        //用来比较2个字符串的字典出现的先后顺序
        System.out.println(str.compareTo("aasdf"));

        //trim()用来去掉字符串首位的空格
        System.out.println(str.trim());

        //trim()用来去掉字符串首位的空格 2020-12-12
        str = str.trim();

        //split("-") 将字符串按照某个字符进行拆分
        String[] strs = str.split("-");
        System.out.println(strs[0]);
        System.out.println(strs[1]);
        System.out.println(strs[2]);

        //字符串的截取(从某一位开始,完成字符串的截取)
        System.out.println(str.substring(5));

        //字符串的截取(某一部分,截取规则:包前不包后[)    )
        System.out.println(str.substring(5, 7));

        //找到某一个字符在字符串中最后一次出现的下标
        System.out.println(str.lastIndexOf("2"));

        //如下3个方法,代表字符串的替换
        System.out.println(str.replace("2020", "2019"));

        //替换第一个符号
        System.out.println(str.replaceFirst("2", "3"));

        //替换所有的符号
        System.out.println(str.replaceAll("2", "3"));

        //字符串的大小转换
        System.out.println("asdfASADFWER".toLowerCase());
        System.out.println("asdfASADFWER".toUpperCase());
    }

4.String类常见面试题

4.1 对象数量


String str = “a” + “b” + “c”;
上述代码只创建了1个对象:abc
String a = “a”;
String b = “b”;
String c = “c”;
String d = a + b + c 创建了几个对象?答案:5
“a” “b” “c” “ab” “abc”

4.2 String str = new String(“abc”); 创建了几个对象?


答案:2
“abc” new String()

4.3 如何获得数组的长度以及字符串的长度?


使用length属性来获得数组的长度
使用length()方法来获得字符串的长度

4.4 String StringBuffer StringBuilder 的区别?


1、String是长度固定,并且内容不可改变的字符串;其他2种都是可以改变的
2、StringBuffer 和 StringBuilder的区别,StringBuffer的方法使用synchronized,从而做到了”线程安全”
线程安全,意味着:数据的准确性,但是效率低
线程不安全,意味着:数据的准确性相对较差,但是效率高