栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-05

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-05

java中的String,StringBuffer和StringBuilder的区别

在 Java 中字符串属于对象

1. String

创建字符串:

String s1 = "Runoob";              // String 直接创建
String s2 = "Runoob";              // String 直接创建
String s3 = s1;                    // 相同引用
String s4 = new String("Runoob");   // String 对象创建
String s5 = new String("Runoob");   // String 对象创建

直接创建和对象创建的区别:

常用的方法:

SN(序号)方法描述
1char charAt(int index) 返回指定索引处的 char 值。
2int compareTo(String anotherString) 按字典顺序比较两个字符串
3String concat(String str) 将指定字符串连接到此字符串的结尾。
4boolean equals(Object anObject) 将此字符串与指定的对象比较。
5int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。
6int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
7int length() 返回此字符串的长度。
8isEmpty() 判断字符串是否为空。
9String trim() 返回字符串的副本,忽略前导空白和尾部空白。
10contains(CharSequence chars) 判断是否包含指定的字符系列。
11String toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
12char[ ] toCharArray() 将此字符串转换为一个新的字符数组。
13String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
14[String] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。

代码示例:

package com.leetcode.String;

public class String01 {
    public static void main(String[] args){

        String str = "Hello ";

        //判断字符串是否为空:false
        System.out.println("判断字符串是否为空:" + str.isEmpty());
        //下标为0的字符为:H
        System.out.println("下标为0的字符为:" + str.charAt(0));
        //在结尾连接字符串:Hello World! 
        str = str.concat("World!   ");
        System.out.println("在结尾连接字符串:" + str);
        //字符串的长度:15
        System.out.println("字符串的长度:" + str.length());
        //忽略前导空白和尾部空白Hello World!
        str = str.trim();
        System.out.println("忽略前导空白和尾部空白" + str);
        //字符串的长度:12
        System.out.println("字符串的长度:" + str.length());
        //转大写:HELLO WORLD!
        System.out.println("转大写:" + str.toUpperCase());
        //str = Hello World!
        System.out.println("str = " + str);

    }
}
2. StringBuilder和StringBuffer

StringBuffer与StringBuilder的用法完全相同,只是StringBuffer是线程安全的。

1public StringBuffer append(String s) 将指定的字符串追加到此字符序列。
2public StringBuffer reverse() 将此字符序列用其反转形式取代。
3public delete(int start, int end) 移除此序列的子字符串中的字符。
4public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。
5insert(int offset, String str) 将 str 参数的字符串插入此序列中。
6replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。

代码示例:

//定义
StringBuilder sb = new StringBuilder();
//追加字符串
sb.append("java");
//插入
sb.insert(0,"hello"); // hellojava
//替换
sb.replace(5,6,"B"); // helloBava
//删除
sb.delete(5,6);  // helloava
//sb的长度
System.out.println(sb.length());  // 8
//sb的容量,通常比length大
System.out.println(sb.capacity()); // 16
3.继承结构
public final class String 
    implements java.io.Serializable, Comparable, CharSequence,
               Constable, ConstantDesc {
                   
}

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable, CharSequence
	{ }

 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable, CharSequence
	 {	}

4. 三者的区别
StringStringBufferStringBuilder
String的值是不可变的,导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量可变类,速度更快
不可变可变可变
线程安全线程不安全
多线程操作字符串单线程操作字符串
5.总结

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号