String类

String 类

位于java.lang包
public final class String extends Object implements Serializable, Comparable<String>,          
                             CharSequence
     String是final修饰的,是常量,它们的值在创建之后不能更改 
     字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享
 
 String效果上相当于cher[],但底层原理确是byte[]1.9之后
 
 所有的字符串面值"ddd"  都做为此类的实例实现
 只要是双引号字符串,就算没有new,也是String对象

特点

   字符串的内容不可变,指的是同一块堆内存里的值是不会改变的

创建String的常见方式

   > String str1=new String();   这样创建的对象为空值,但由于String是不可变的,所以这个可以省略
     
   > char[] ch={'1','2','4'}
     String str2=new String(ch);
     
   > byte[] by={45,33,22,66,88};   String类底层就是byte数组1.9之后
     String dtr3=new String(by);    

   > String str="ddddd"

常量池

  直接使用双引号创建的字符串,会自动保存在常量池里(常量池的对象保存的也是地址值,指向的是创建对象的byte数组)
  且常量池在堆内存里

在这里插入图片描述

具体,String查看大神的帖子

常用方法

   boolean equals (String str)   进行字符串内容的比较
   boolean equalsIgnoreCase(String str)    忽略大小写进行比较
   String concat(String str)    将当前字符串和参数字符串拼接为新的字符串斌且返回
   
   char  charAt(int index)   获取指定索引位置的单个字符
   int  indexof(String str)   查找参数字符串在该字符串中首次出现的位置,没有返回-1
   String subString(int index)   从参数位置开始截取,到末尾
   String subString(int index,int end)  从index开始截取,到end-1位置的字符串
  
   char[]  toCharArray()   将字符串拆分为字符数组并且返回
   byte[]  getbytes()  获得当前字符串对象的底层字节数组
   String replace(CharSequence old,CharSequence newstring)   将字符串中的old替换为newstring
     将所有出现的老字符串替换为新的字符串,并且返回 

  String[]  split(String regex)   按照参数的规则,将字符串分割成若干份
     该参数其实是一个正则表达式     当然也可以使用普通地字符进行切割
     当使用到一些特殊地符号时,需要使用转义如"\\."

静态方法, static String valueOf() 将其他类型地数据转换为字符串,int ,long,float,double,boolean,char等
其实,构造中也有对于byte数组转为字符串的方法

弊端

      由于字符串不可变, 改变字符串其实是创建了另一个实例  ,这样依赖就会占用空间多,效率低 
      下     ,但是字符串缓冲区的是可以改变的,如下

StringBuilder 字符串缓冲区可以改变

          public final class StringBuilder extends Objectimplements Serializable, CharSequence

            一个可变的字符序列     不是线程安全的
              可以看成一个长度可以变的字符串            可以提高效率
              底层也是数组,但没有被final修饰
              初始容量为16  
              byte[] value=new byte[16]; 
              在内存中。始终是一个数组  
              如果超过了容量,不会分配新的缓冲区,而是会自动扩容一倍

构造方法

         public StringBuuilder() :构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。  
         public StringBuilder(int capacity) :构造一个不带字符,但具有指定初始容量capacity的字符串缓冲区。  
         public StringBuilder(String str) :构造一个字符串缓冲区,并将其内容初始化为指定的字符串内
                                          容。该字符串的初始容量为 16 加上字符串参数的长度 
         public StringBuilder(CharSequence seq):  它包含与指定的 CharSequence 相同的字符 ,该字符 
                                                 串缓冲区的初始容量为 16 加上 CharSequence 参数的长度。 

成员方法 (常用)

      public StringBuilder append(Object obj)      追加 Object 参数的字符串表示形式。 
          它支持各种数据的加入   Stringbuffer   String   都可以  ,数组等 
    
    StringBuilder insert(int oio,float s)
    将 float 参数的字符串表示形式插入此序列中。 
     其中可以是其他类,Object也可以,除了byte个short

      public int capacity()    返回当前容量   

      public char charAt(int index)返回此序列中指定索引处的 char 值 
       
      public StringBuilder delete(int start,int end)
      移除此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的  
      字符,如果不存在这种字符,则一直到序列尾部,如果 start 等于 end,则不发生任何更改   

      public StringBuilder deleteCharAt(int index)移除此序列指定位置上的 char。
                  
     public int indexOf(String str,int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符
                     串在该字符串中的索引   fromIndex开始索引  
     public int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引 
      
      public StringBuilder insert(int offset,Object obj):将 Object 参数的字符串表示形式插入此字符 
                        序列中。 其他的数据类型都可以 
      public void setCharAt(int index, char ch)     给定索引处的字符设置为 ch 
       
       public StringBuffer reverse()   将此字符序列用其反转形式取代  
     
        public String toString()  返回此序列中数据的字符串表示形式。
       
       等等众多常用方法

上面的StringBuilder不是线程安全的
还有一个类
StringBuffer 除了是线程安全的,其他都一样

由此我们得知,
当是单线程时,我们使用StringBulider
当是多线程时,我们使用StringBuffer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值