Java中的String,StringBuilder,StringBuffer三者的区别

  • String
    在这里插入图片描述
    通过api可以看到String是字符串常量,常量是不可以被修改的,所以String对象一旦被创建是不能改变的,但是下面的代码明明改变了,其实这只是一种假象。jvm实际上是这样解析的:先在字符串常量池创建一个对象str赋值asd,然后在创建个对象赋值asdas第一个str就会垃圾回收机制回收,所以String对象一旦被创建是不能改变,java String对象实际上是一个不断被创建然后被回收的过程。所以其执行速度是最慢的,但是不可变也注定其线程是安全的。
package demo3;

public class StringDemo {

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

package demo3;


public class StringBufferDemo {
    public static void main(String[] args) {
      String str = "hello,world";
      StringBuffer sb = new StringBuffer("你好,世界");
      str.replace('h','H');
      System.out.println(str);

    sb.replace(0,2,"hello");
        System.out.println(sb);
        
    }
}

通过代可以直观的看出String为常量

  • StringBuilder和StringBuffer
    StringBulider和StringBuffer的对象是变量,对变量进行操作就是直接改变变量的值,而不进行创建回收,所以速度要比String快的多。
    二者之间的区别就在于线程安全上:
    StringBuffer:线程安全的可以被多个线程安全使用,其方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,
    StringBuilder:线程不安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。 因此其速度也是最快的

总结:

  1. 三者在执行速度方面的比较:StringBuilder > StringBuffer > String
  2. String:字符串常量 如果要操作少量的数据用 = String
  3. StringBuffer:字符串变量 如果要操作少量的数据用 = String
  4. StringBuilder:字符串变量 如果要操作少量的数据用 = String

String方法使用

package demo3;

public class StringDemo {

    public static void main(String[] args) {

        //String类的构造方法
        byte[] a = {'1','2','3'};
        char[] c = {'1','2'};
        String c1 = new String(c);      //将字符数组转换成字符串
        String a1 = new String(a);      //将byte数组转换成字符串
        String s1 = new String(new StringBuffer("wwe"));//将StringBuffer或StringBuilder转换成字符串

        //具体方法

        System.out.println(a1.charAt(1));  //返回字符串指定索引出的值
        System.out.println(a1.compareTo("a"));//按照按字典顺序比较两个字符串。返回两个字符串中第一个不同的字符的ascII码差值。 不同于equals
        System.out.println(a1.concat("232")); //jiang指定的字符串连接到字符串的尾部
        System.out.println(a1.contains("123"));//判断是否含指定的字符串
        System.out.println(a1.endsWith("23")); //测试字符串是否已指定的字符结尾
        System.out.println(a1.equals("123"));  //将此字符串与指定对象进行比较。

        System.out.println(String.format("%s",a1));//类似于c语言 将字符串进行格式化

        char[] c4 = new char[12];
        a1.getChars(1,3,c4,0);  //将此字符串中的字符复制到目标字符数组中
        for (char c0:c4) {
            System.out.println(c0);
        }

        System.out.println(a1.length());//返回指定字符串的长度、

        System.out.println(a1.replaceAll(a1,"dfg")); //替换字符串中的值
        System.out.println(a1.replace('1','0'));//替换指定字符
        String sp = "a|b|c";
        for (String s : sp.split("\\|")) {   //字符分割 注意特殊字符转义
            System.out.println(s);
        }

        char[] c5 = a1.toCharArray(); //将字符串转换成数组
        a1.toUpperCase(); //转换成大写
        a1.trim(); //去掉空格
        String.valueOf(1); //将参数转换为字符串
        
    }
}

StringBuffer

package demo3;


public class StringBufferDemo {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("梵蒂冈"); //初始容量为16个字符
        System.out.println(stringBuffer);
        System.out.println(stringBuffer.capacity());  //所以这里输出的是19
        System.out.println(stringBuffer.append("fds"));
        System.out.println(stringBuffer.delete(3,4)); //删除此序列的子字符串中的字符。
        System.out.println(stringBuffer.insert(3,"f")); //将字符串插入到此字符序列中
        System.out.println(stringBuffer.reverse());//反转
        stringBuffer.setCharAt(0,'x');//设置指定索引出的值
        System.out.println(stringBuffer);
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
StringStringBufferStringBuilderJava 用于处理字符串的三个类。 1. String 类: String 类是不可变的,即创建后不能被修改。每次对字符串进行修改都会创建一个新的字符串对象。例如: ``` String str = "Hello"; str += " World"; ``` 在上面的代码,"Hello" 和 " World" 是两个不同的字符串对象,通过 `+=` 操作符连接后,会创建一个新的字符串对象 "Hello World"。 2. StringBuffer 类: StringBuffer 类是可变的,可以对字符串进行修改。它是线程安全的,适用于多线程环境下的字符串操作。例如: ``` StringBuffer sb = new StringBuffer("Hello"); sb.append(" World"); ``` 在上面的代码,"Hello" 是一个 StringBuffer 对象,通过 `append()` 方法连接后,会直接对原对象进行修改,得到一个新的 StringBuffer 对象。 3. StringBuilder 类: StringBuilder 类也是可变的,可以对字符串进行修改。它与 StringBuffer 类相似,但不保证线程安全。适用于单线程环境下的字符串操作。例如: ``` StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); ``` 在上面的代码,"Hello" 是一个 StringBuilder 对象,通过 `append()` 方法连接后,会直接对原对象进行修改,得到一个新的 StringBuilder 对象。 总结: - String 是不可变的,每次修改都会创建一个新的对象。 - StringBuffer 是线程安全的可变字符串,适用于多线程环境。 - StringBuilder 是非线程安全的可变字符串,适用于单线程环境。 在性能方面,StringBuilder 的性能通常优于 StringBuffer,因为不需要进行线程同步。但在多线程环境下,仍然推荐使用 StringBuffer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值