String类

1. String的两种创建方式

public class StringDemo1 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("world");
        String str4 = new String("world");
        System.out.println(str1 == str2);//true
        System.out.println(str1.equals(str2));//true
        System.out.println(str3 == str4);//false
        System.out.println(str3.equals(str4));//true
    }
}
  • str1:系统会在常量池里面创建一个hello的字符串对象。
  • str2:str1和str2指向的是同一块内存区域
  • str3::系统会在常量池里面创建一个world字符串对象,然后在堆内存里面再创建一个world字符串对象,即创建两个对象。
  • str4:在常量池的对象和str3一样,但在堆区中创建了一个和str3地址不一样的world字符串对象。

2. String的一些特性

  • 1>.String类是final修饰的,这说明String类不能被继承。
  • 2>.字符串的底层是用一个final修饰的字符数组,所以字符串一旦创建好之后,
    里面的内容是不能被修改的。
 /** The value is used for character storage. */
    private final char value[];
  • 3>.尽量不要做字符串频繁的拼接操作。因为字符串一旦创建不可改变,如果频繁拼接,就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题。

3. String类常用方法

  • 1> char charAt(int index);获取index位置的字符
  • 2> boolean contains(CharSequence s);判断字符串中是否包含某个字符串
  • 3> boolean endsWith(String endStr);判断是否是以某个字符串结尾
  • 4> boolean equalsIgnoreCase(String anotherString);忽略大小写比较两个字符串是否相等
  • 5> byte[] getBytes();转换成byte数组
  • 6> int indexOf(String str);取得指定字符在字符串的位置
  • 7> int indexOf(String str, int fromIndex);从指定的下标开始取得指定字符在字符串的位置
  • 8> int lastIndexOf(String str);从后面开始取得指定字符在字符串最后出现的的位置
  • 9> int lastIndexOf(String str, int fromIndex);从后面开始指定的下标开始取得指定字符在字符串的位置
  • 10> int length();获取字符串的长度
  • 11> String replaceAll(String s1,String s2);替换字符串中的内容
  • 12> String[] split(String s);根据指定的表达式拆分字符串
  • 13> boolean startsWith(String s);判断是否是以某个字符串开始
  • 14> String substring(int begin);根据传入的索引位置截子串
  • 15> String substring(int beginIndex, int endIndex);根据传入的起始和结束位置截子串
  • 16> char[] toCharArray();将字符串转换为char数组
  • 17> void toUpperCase();转换为大写
  • 18> void toLowerCase();转换为小写
  • 19> String trim();去除首尾空格
  • 20> String valueOf(Object obj);将其他类型转换为字符串类型

4. String,StringBuffer 和 StringBuilder

  • 1>. StringBuilder是非线程安全的,String和StringBuffer是线程安全,单线程优先用StringBuilder,效率高。
  • 2>.如果有大量的字符串拼接,如果能预知大小的话最好在new StringBuffer 或者StringBuilder 的时候设置好capacity,避免多次扩容的开销。扩容要抛弃原有数组,还要进行数组拷贝创建新的数组。
  • 3>. 如果是少量的字符串拼接,用String就可以了。

String源码分析:
https://blog.csdn.net/u012317510/article/details/83552104

StringBuffer源码分析:
https://blog.csdn.net/u012317510/article/details/83722399

StringBuilder源码分析:
https://blog.csdn.net/u012317510/article/details/83721250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值