专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

String类、StringBuffer类StringBulider类(对象和对象的引用、三个类的区别)

1、String类

(1)String类的特点一(字符串一旦确立就不能更改,字符串是一个常量。)

也就是说String类对象不可变,对象的引用可以改变。
不可变的对象:

    public static void main(String[] args) {
        String str="123";
        str="234";
        System.out.println(str);
    }

输出的结果为234。

35_1.png

上面在对str改变值的过程中体现的便是对象的引用的改变。

(2)String的特点二:String不属于八大基本数据类型,它属于引用数据类型。
    String str="123";
    String str1=new String("234");

以第二种方式跟类创建对象的方式是一样的。

(3) String类的方法:

import java.util.Scanner;

public class StringDemo {
    public static void main(String[] args) {
        System.out.println("请输入第一个字符串:");
        Scanner sc1 = new Scanner(System.in);
        String str1 = sc1.nextLine();// 在内存中只有一个对象。这个对象在字符串常量池中
        System.out.println("请输入第二个字符串:");
        Scanner sc2 = new Scanner(System.in);
        String str2 = new String(sc2.nextLine());// 在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
        System.out.println("两个字符串地址是否相等:" + (str1 == str2));// (1)
        System.out.println("两个字符串元素是否相等:" + str1.equals(str2));// (2)
        System.out.println("两个字符串元素是否相等:" + str1.equalsIgnoreCase(str2));// (2)
        System.out.println("字符串一的长度为:" + str1.length());// (3)
        System.out.println("字符串一为:" + str1.toString());
        System.out.println("字符串二为:" + str2.toString());
        System.out.println("字符串一从地址2开始取字符串:" + str1.substring(2));// (4)
        System.out.println("字符串一从地址2到5取字符串:" + str1.substring(2, 5));// (5)
        System.out.println("字符串一是否以指定前缀1开始:" + str1.startsWith("1"));// (6)
        System.out.println("字符串二是否以指定后缀9结束:" + str2.endsWith("9"));// (7)
        System.out.println("字符串一是否包含字符串123:" + str1.contains("123"));// (8)
        System.out.println("字符串123在str1中第一次出现的索引:" + str1.indexOf(str1));// (9)
        char[] chs = str1.toCharArray();// (10)转换为字符数组
        String s0 = new String(chs);
        System.out.println(s0);
        System.out.println("字符数组的第一个字符为:" + chs[0]);
        byte[] bytes = str1.getBytes();// (11)转换为字节数组
        String s = new String(bytes);
        System.out.println(s);
        System.out.println(bytes[0]);
        System.out.println("字符串二转换为大写字母为:" + str2.toUpperCase());// (12)
        System.out.print("charAt的运用:");
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i); // 获取指定位置上的字符
            System.out.print(ch);
        }
    }
}

35_2.png

(4)对象与对象的引用:

java中经常说的一句话是“万物皆对象”,那么究竟什么是对象呢?

对象是类的一个实例,比如说人类是一个类,那么具体到一个人的话这个人就是一个对象,该对象有具体的年龄、性别、姓名等属性。

什么又是对象的引用呢?

  Person person;
  person=new Person("zhai",12);
  person=new Person("zhang",23);

可以看到后两行代码分别创建了两个对象,那么person就是对象的引用,对象的引用可以指向Person类型的任何一个对象。

2、StringBuffer类

StringBuffer类:与String类不同,StringBuffer类在创建对象之后可以用不同的方法对该对象进行多种方式的修改。

public class StringBufferDemo {
    public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();
    sb.append("1234"); //添加字符串
    sb.insert(2, "dont");//在指定位置插入,
    sb.delete(1, 4);//删除,包含头,不包含尾
    sb.replace(1, 4, "not");//替换指定范围内的内容,包含头,不包含尾
    String str = sb.toString();
    System.out.println(str);
    System.out.println(sb.reverse());//反转
    System.out.println("字符串的长度为:"+sb.length());
}
}

35_3.png

3、StringBulider类

StringBulider类创建的字符串同样可以对字符串进行修改:

public class StringBuliderDemo {
    public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    sb.append("1234"); //添加字符串
    sb.insert(2, "dont");//在指定位置插入,
    sb.delete(1, 4);//删除,包含头,不包含尾
    sb.replace(1, 4, "not");//替换指定范围内的内容,包含头,不包含尾
    String str = sb.toString();
    System.out.println(str);
    System.out.println(sb.reverse());//反转
    System.out.println("字符串的长度为:"+sb.length()); } }

35_4.png

4、 String类、StringBuffer类、StringBulider类的区别

(1)线程安全性:

线程安全:String、StringBuffer

线程不安全:StringBulider

(2)执行效率

StringBulider最快,Stringbuffer次之,String最差

(3)存储空间

String的对象一旦创建就不能改变,是一个常量,对String操作后会生成新的String,效率低且浪费空间。

StringBuffer和StringBulider的对象都是可以改变的,节省了空间,效率较高。不能使用String”+”来拼接,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。

(4)使用场景

少量数据:String

大量数据、多线程:StringBuffer

大量数据、单线程:StringBulide

总结:

String、StringBuffer、StringBulider的区别:https://tech.souyunku.com/zhai1997/p/12423092.html

文章永久链接:https://tech.souyunku.com/22664

未经允许不得转载:搜云库技术团队 » String类、StringBuffer类StringBulider类(对象和对象的引用、三个类的区别)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们