• 【JavaSE】String类的重点语法知识汇总


    目录:

    思维导图:

    1.String类和String常用方法:

    2.字符串常量池:

    3.字符串的不可变性:

    4.StringBuilder和StringBuffer:


    思维导图

     

    1.String类和String常用方法

    1. String是引用类型,内部存放的是对象的地址,一般看到" "引起来的就是String类型的对象。
    2. String类的构造方式,常用三种:直接赋值、new String()、用字符数组构造
      //String类的构建
      String str1 = "goodboy";//直接赋值
      String str2 = new String("goodboy!");//使用new String();
      char[] ch = {'g','o','o','d','b','o','y'};//利用字符数组来帮助构建
      String str3 = new String(ch);
      //下图是不同创建方式在内存上存储的区别
      

    3. 得到字符串的长度是使用length (),例如:str1.length ();注意不能省略括号,求数组长度时使用array.length,注意二者区别!
    4. 比较俩个字符串类型的对象是否相同不能使用==,引用类型比较时用==的话比较的是地址;如果想比较俩个字符串内容是否相同需要使用equals方法,例如:str1.equals(str2)。比较俩个字符串类型的对象大小是可以使用compareTo方法,例如:str1.compareTo(str2);比较的是字符的ascii码值。
      String str1 = "hahahaha";
      String str2 = "HAHAHAHA";
      
      System.out.println(str1.compareTo(str2));//32
      //忽略大小写比较大小
      System.out.println(str1.compareToIgnoreCase(str2));//0                                         
      System.out.println("=====================");
      System.out.println(str1.equals(str2));//false
      //忽略大小写比较是否相同
      System.out.println(str1.equalsIgnoreCase(str2));//true
    5. String类中可以使用charAt(index);来查找字符串中index下标的字符,注意首字符是0下标,index的下标注意不能越界,否则会报错。
      String str1 = "holabce";
      char ret = str1.charAt(3);
      System.out.println(ret);//输出结果为:a
    6. 数字变字符串使用String.valueOf(数字)
      class student{
          public int age;
          public student(int age) {
              this.age = age;
          }
          @Override
          public String toString() {
              return "student{" +
                      "age=" + age +
                      '}';
          }
      }
      //方法1,
      String s1 = String.valueOf(123);
      String s2 = String.valueOf(0.666);
      方法2,
      String s3 = String.valueOf(new student(16));
      System.out.println(s3);
    7. 字符串转数字使用Integer.valueOf(字符串)或着Integer.parseInt(字符串)
      int a = Integer.valueOf("66");
      int b = Integer.parseInt("99");
    8. 字符串的大小写转换,改变大小写不是把原来的值改变,是产生了新的对象,原来的值不会改变。
      String s1 = "goodboy";
      //不会改变字符串s1
      String ret = s1.toUpperCase();
      System.out.println(s1);//goodboy
      System.out.println(ret);//GOODBOY
      
      String s2 = "GOODBOY";
      String ret2 = s2.toLowerCase();
      //不会改变字符串s2
      System.out.println(s2);//GOODBOY
      System.out.println(ret2);//goodboy
    9. 字符串转换成字符数组使用toCharArray()改变的不是原字符串。
      String s1 = "goodboy";
      char[] chars = s1.toCharArray();
      for (char x: chars) {
          System.out.println(x);
      }
      System.out.println(s1);//goodboy

    2.字符串常量池:

    1. 字符串常量池的存在为了使程序的运行速度更快更节省内存,字符串常量池存放在堆上双引号引起来的字符串都会存放在常量池中,当第二次存储这个字符串的时候就会先去常量池中查找如果有返回地址,如果没有则添加到常量池当中。
    2. s1.intern();的作用是检测s1所指的对象是否在常量池中存在,如果不存在就把当前对象入池;如果存在就返回常量池的对象的地址。该方法是手动将String对象添加到常量池中。
    3. 只要是new一个对象,这些对象都是唯一的,他们的地址都不一样

    4. 解释一下String类三种对象实例化的区别。

      1.String str1 = "abcde";
      只会开辟一块堆内存空间并存放在常量池中
      
      2.String str2 = new String("abcde");
      会开辟俩块堆内存空间,将字符串abcde到常量池中,还有一块存放:new一个String对象
      
      3.char[] ch = {'a','b','c','d','e'};
      String str3 = new String(ch);
      会开辟三块堆内存空间,一块空间存放数组,另外一块存放拷贝后的数组,还有一块存放:new一个String对象

    3.字符串的不可变性:

    1. string类在设计时就是不可以改变的,是private引起的和final无关
    2. 所有涉及到可能会修改字符串内容的操作都会创建一个新的对象,改变的是新的对象。
    3. final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。因为引用类型存放的是地址,改变了内容,但是地址又不会发生变化。
      1.
      public final array[] = {1,2,3,4,5,6};
      array[0] = 66;//不会报错
      2.
      array = new int[]{9,10,11,12};//array的引用都变了,报错

    4.StringBuilder和StringBuffer:

    1. StringBuilder和StringBuffer的存在是为了解决字符串不方便修改的问题。
    2. append();在字符串的尾部追加内容。
    3. String和StringBuilder的最大区别就是String内容无法修改,而StringBuilder的内容可以修改。频繁的修改字符串可以使用StringBuilder
    4. String和StringBuilder不能直接相互转换。String变StringBuilder需要利用StringBuilder的构造方法和append方法;StringBuilder转String需要调用toString方法。
    5. String、StringBuilder和StringBuffer的区别:
      1.String的内容不可以修改,StringBuilder和StringBuffer的内容可以修改
      2.StringBuilder和StringBuffer的功能类似
      3.StringBuffer属于线程安全操作
    6. 判断创建了多少个String对象
      //hello String
      String str1 = new String("hello");共创建了俩个对象
              
      //a String b String StringBuffer toString
      String str2 = new String("a")+new String("b");//共创建了6个对象

    如果对您有帮助的话,

    不要忘记点赞+关注哦,蟹蟹

    如果对您有帮助的话,

    不要忘记点赞+关注哦,蟹蟹

    如果对您有帮助的话,

    不要忘记点赞+关注哦,蟹蟹

  • 相关阅读:
    扯什么kafka顺序消费,然后呢?古尔丹,代价是什么
    SpringBoot视图渲染技术
    力扣第232题“用栈实现队列”
    AtCoder Beginner Contest 264 部分题解
    454. 四数相加 II
    【算法篇】四种链表总结完毕,顺手刷了两道面试题紧张的羊
    Splashtop 荣获 TrustRadius 颁发的“2022年度最佳软件奖”
    【机器学习】集成学习(实战)
    金典成为饿了么小蓝盒首个低碳“盒”伙人:战略合作迎绿色亚运
    [Linux]套接字通信
  • 原文地址:https://blog.csdn.net/qq_68993495/article/details/127123304