【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个对象

如果对您有帮助的话,

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

如果对您有帮助的话,

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

如果对您有帮助的话,

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

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珠江上上上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值