String总结

本文介绍了Java中字符串比较的方法(equals()),以及String、StringBuffer和StringBuilder的区别,强调了String的不可变性和在频繁修改场景下使用可变缓冲区的效率提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 字符串比较

用equals()方法比较两个字符串是否相同

如果用==,  代码如下

        String str1 = "i love china";
        String str2 = "i love china";
        String str3 = new String("i love china");
        String str4 = new String("i love china");

        System.out.println("str1 == str2 " + str1 == str2);
        System.out.println("str2 == str3 " + str2 == str3);
        System.out.println("str3 == str4 " + str3 == str4);

/*
控制台
    true  java中规定, 字符串常量一致, 内存只有一个
    false  == 只能判断变量存储的数据内容情况, 无法判断引用类型指向空间内容
    false
*/

String s = "XXX";先检查字符串常量池是否存放该字符串对象, 如果没有存在,那么就会在字符串常量池中创建这个字符串对象,如果存在直接返回该字符串的内存地址值

String s = new String("XXX"); 首先会先检查字符串常量池中存不存在该字符串对象, 如果不存在就会创建,如果存在就返回内存地址值。创建了出来之后,new String这个语句就会在堆内存中开辟一个字符串对象。总共两个对象.

 字符串常用方法

int length()  获取字符串的长度

char charAt(int index) 获取特定位置的字符 (角标越界)

int indexOf(String str) 获取特定字符的位置(overload)

int lastIndexOf(int ch) 获取最后一个字符的位置

    String str1 = "i love china";
        int length = str1.length();  //length = 12
        char c = str1.charAt(2);  //c = ' '
        int indexStr = str1.indexOf("love"); // index = 2(i l)找的l的位置
        int indexChar = str1.lastIndexOf('i'); //index1 = 9 从后找

boolean endsWith(String str) 是否以指定字符结束

boolean isEmpty()是否长度为0 如:“” null V1.6        ("  "除外)

boolean contains(String/char[]/char) 是否包含指定序列 应用:搜索

boolean equals(Object anObject) 是否相等

boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等

String(char[] value) 将字符数组转换为字符串

String(char[] value, int offset, int count)

Static String valueOf(char[] data)

static String valueOf(char[] data, int offset, int count)

char[] toCharArray()  将字符串转换为字符数组

String replace(char oldChar, char newChar) 替换

String[] split(String regex) 切割

String substring(int beginIndex)

String substring(int beginIndex, int endIndex)截取字串

String toUpperCase() 转大写

String toLowerCase() 转小写

String trim() 去除空格

StingBuffer

String是不可变的,所以导致String对象泛滥,在频繁改变字符串对象的应用中,需要使用可变的字符串缓冲区类

默认缓冲区的容量是16

StringBuffer  : 线程安全的所有的缓冲区操作方法都是同步的。效率很低

    private transient char[] toStringCache;
    public StringBuffer() {
        super(16);
    }
    public StringBuffer(int capacity) {
        super(capacity);
    }
添加方法

StringBuffer("jack")     在创建对象的时候赋值

append()              在缓冲区的尾部添加新的文本对象

insert()                在指定的下标位置添加新的文本对象

 查找查看

toString() 返回这个容器的字符串

indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。

substring(int start) 从开始的位置开始截取字符串

 修改

replace(int start int endString str)  使用给定 String 中的字符替换此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符

setCharAt(int index char ch)  指定索引位置替换一个字符

 删除反序
 

StringBuffer delete(int start, int end) 不包含end

StringBuffer deleteCharAt(int index)

StringBufffer reverse() //反序

StringBuilder

StringBuilder 是JDK1.5之后提出的,线程不安全,但是效率要高。用法与StringBuffer类似。

补充

public static void main(String[] args) {
    String str = "AAA";
    str += "BBB";
    str += "CCC";
    str += "DDD";
    str += "EEE";
    str += "FFF";
}
    public static void main(String[] args) {
        String str = "AAA";
        str += "BBB";
        str += "CCC";
        str += "DDD";
        str += "EEE";
        str += "FFF";
    }

 jdk8以后, String+=, 底层是StringBuilder

如下javap -v XX.class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值