String StringBuffer StringBuilder

1.String

   概述
        代表的是字符串 字符串是常量,在创建之后不会被改变
   特点
       使用final修饰,不能被继承
       是对象,而且一次创建终身不变的对象
      内部结构很特殊,在内存中有个字符串常量池,所有的字符串存放在字符串常量池中
  构造方法
      String   (byte[] bytes) 通过byte数组构造字符串对象 
                     (byte[] bytes,int a,int b) 通过使用平台的默认字符集解码指定的byte子数组,构造新的String
                   (char[] value) 通过char数组构造字符串对象
                   (String original) 构造original的副本
                   (StringBuffer buffer) 通过StringBuffer数组构造字符串对象
   常用功能
  •        判断             
            equals (内容判断是否相等,区分大小写)            
            equalsIgnoreCase( 内容判断是否相等,不区分大小写
            Contains(是否包含子字符串)
            isEmpty(判断字符串长度是否为0)
            startWith(是否以该字符串为开头)
            endsWith(是否以该字符串结尾)
            contentEquals(字符串与StringBuffer内容是否一致)
  •      获取
            length   获取字符串长度
            charAt  获取指定索引对应字符
            indexOf 判断int值对应的字符在改字符串中出现的位置  子字符串在该字符串中出现的位置
            subString  截取
            copyValueOf  将字符数组转换为字符串
  •    转换

            getBytes   转换为byte[]数组
           tocharArray   转换为字符数组
           valueOf  将基本数据转换为字符串
           toLowerCase  转换为小写
           toUpperCase  转换为大写
           concat   凭借
  •      其他  
            replace 替换
            trim  去首位空格
            compareTo  比较俩字符串大小    大于0  前者大   等于0 一样大   小于0  后者大
2.StringBuffer
  概述
        线程安全的可变字符序列 类似于String的字符缓冲区,但可以修改
        解决了  对字符串进行凭借操作,每次拼接,会构造的新的String对象 既耗时又浪费时间
  特点
         是一个具体的操作类  必须通过构造方法完成
 构造方法

        StringBuffer() 无参构造方法
       StringBuffer(int capacity) 指定容量的字符串缓冲区对象
       StringBuffer(String str)  指定字符串内容的字符缓冲区对象
  功能
  •         添加 
                append(String str)   把任意类型的数据添加到字符串缓冲区里
                insert(int offset,String str)  在指定位置把任意类型的数据插入到字符缓冲区里
  •         删除
                deleteCharAt(int index)   删除指定位置的字符
                delete(int start,int end)  删除从指定位置开始到指定位置结束的内容
  •         替换
                 replace(int start,int end,String str)  替换
  •         反转
                 reverse()  反转
  •         截取
                subString(int start)   截取第几个索引值之前的
                subString(int start,int end)   截取第几个索引和第几个索引之间

3.StringBuilder
          一个可变的字符序列。提供了一个与StringBuffer 兼容的API,但不保证同步,该类被设计用作StringBuffer的一个建议替换,用在字符串缓冲区被当个线程使用的时候,如果可能 建议优先采用该类。

问题      1.  String和new String的区别
             2.  String和StringBuffer的转换
             3.  String StringBuffer StringBuilder的区别
             4.  ==和equal的区别
   1.  String str1 = “ABC"   和 String  str2  = new String("ABC")的区别   
              对于字符串:其对象是存储在栈中的    ""定义的存储在常量池中   new 确定存储在堆中 
               相等的字符串 在常量池中只有一份,在堆中有多份 (String str 在栈中  “ABC"在常量池中 new String() 在堆中)
          String str1="ABC"可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。

            String str2 = new String("ABC")至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
String str1 = new String(“abc”)        str1 != str2      (== 与equals的区别)
String str2 = new String("abc")  
String str3 = "ABC"                          str3 = str4
String str4 = "ABC"                          str3 = str4 = str5
String str5 = "A"+"BC";  

  2.  String和StringBuffer的转换
            String转StringBuffer:  StringBuffer sb = new StringBuffer(s);   String  s  = new String("xxx");
            StringBuffer转String:  String str = sb.toString();

3.String 和StringBuffer  StringBuilder的区别
  •        执行速度:StringBulider>StringBuffer>String
  •       变量(常量)  线程安全 。。。。。。
         String                                                                    StringBuffer
`         常量,不可变的                                                     变量,可以修改内容    
 `        在进行字符串处理时,会产生新的String对象          在进行字符串处理是,不会产生新的String对象
 `       添加字符串使用 “+”                                            添加字符是使用   append()
 `       线程安全                                                                 线程安全的(多线程程序中可以使用 但执行效率缓慢)
        StringBuilder
`        变量,可以修改内容
`       线程不安全的 (单线程中的性能比StringBuffer高)

        总结  : 

                 1.如果要操作少量的数据用 = String
                2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
                3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
    
        4.== 和equal的区别
            ==是一个运算符   equals则是string对象的方法
            == 比较的是引用类型 比较的是地址值是否相同
            equals 比较的是内容是否相同(堆中的内容是否相同)

  扩展        String的一种方式比StringBuffer快的多  
    e.g.      String  s  = "hello"+"you"+"hao"这种方式比StringBuffer的append()快的多,这就被jvm解析成StringBuffer对象的拼接    
     String s = "hello" String s2 = "you"   String s3 = "hao"   String s4 = s+s2+s3  这种方式比StringBuffer慢的多这样jvm就规规矩矩的拼接String字符串了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值