java String类

文章介绍了Java中字符串实例化的两种方式(直接赋值和new),以及String对象的常用方法。重点讨论了StringBuilder和StringBuffer的选择,强调了在单线程和多线程环境下的适用性。
摘要由CSDN通过智能技术生成

一.实例化

补充:""括起来的如果字符串常量串中没有,则会新建一个

1.直接赋值

        String s="abc";(会指向字符串常量池中的对象)

2.new

       String s=new String("abc")(一定会在堆中新开辟一片空间)

        String s=new String("abc").intern(在字符串中找,如果没有则把堆中对象放到字符串常量 池中)

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



        //字符串常量池中已有对象,不会新建,所以地址一样;
        String a="abc";
        String b="abc";
        System.out.println(a==b);

        //new 一定会新开辟一片内存;
        String  c=new String("ccc");
        String d="ccc";
        System.out.println(c==d);

        // s2.intern() 返回的是字符串常量池中 "abc" 的引用
        String e = "abc";
        String f = new String("abc").intern();

        System.out.println(e==f);


    }
}

二.常用方法

查询
length(): 返回字符串的长度。
charAt(int index): 返回指定索引处的字符。
indexOf(String str): 返回指定子字符串在此字符串中第一次出现处的索引。
lastIndexOf(String str): 返回指定子字符串在此字符串中最右边出现处的索引。
startsWith(String prefix): 判断字符串是否以指定的前缀开始。
endsWith(String suffix): 判断字符串是否以指定的后缀结束。
contains(CharSequence s): 判断字符串是否包含指定的字符序列。
比较
equals(Object anObject): 比较两个字符串的内容是否相同。
equalsIgnoreCase(String anotherString): 忽略大小写,比较两个字符串的内容是否相同。
compareTo(String anotherString): 按照字典顺序比较两个字符串。
操作
substring(int beginIndex): 返回一个新字符串,它是此字符串的从 beginIndex 开始截取到最后的一个子字符串。
substring(int beginIndex, int endIndex): 返回一个新字符串,它是此字符串的从 beginIndex 开始截取到 endIndex-1 的一个子字符串。
concat(String str): 将指定的字符串连接到该字符串的末尾。
replace(char oldChar, char newChar): 返回一个新的字符串,它是通过用 newChar 替换此字符串中所有出现的 oldChar 得到的。
trim(): 返回一个新字符串,它删除了原始字符串头部和尾部的空白。
转换
toUpperCase(): 将所有字符转换为大写。
toLowerCase(): 将所有字符转换为小写。
toString(): 返回此字符串对象本身(String 类已经覆盖了 Object 类的 toString 方法)。
分割
split(String regex): 根据匹配给定的正则表达式来拆分此字符串。
其他
isEmpty(): 判断字符串是否为空。
join(CharSequence delimiter, CharSequence... elements): 静态方法,返回一个新的字符串,由指定的字符串数组 elements 通过指定的分隔符 delimiter 连接而成。
 

三、StringBuilder和StringBuffer

StringBuilder:
StringBuilder是Java 5中引入的,它不是线程安全的。
由于它不是线程安全的,所以在单线程环境下,StringBuilder通常比StringBuffer性能更好。
当只在单个线程中使用字符串缓冲区时,建议使用StringBuilder。
StringBuffer:
StringBuffer是Java语言早期版本中就存在的,它是线程安全的。
为了保证线程安全,StringBuffer的大多数方法都使用了同步机制,因此在多线程环境下使用StringBuffer是安全的。
由于线程安全的同步机制,StringBuffer的性能通常不如StringBuilder。

选择使用哪一个,取决于您的具体应用场景。如果您在单线程环境中操作字符串,那么StringBuilder是更好的选择;如果您在多线程环境中操作字符串,那么为了保证线程安全,应该使用StringBuffer。

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值