String类、StringBuilder类与StringBuffered类、equals方法与==、 常量池

=======================================================================
*String类型:(底层是字符数组+对数组的操作)
  --特点:
       (1)是不可变的字符串类型,(不可变:对象的内容不能更改)
       (2)final修饰的类型
       (3)字符下标(索引/index)从0开头
       (4)重写了equals方法和toString方法
            (只要两个字符串所包含的字符序列相同,通过equals()比较将返回true)
       (5)默认使用的是unicode字符集,[任意字符都占两个字节]

   --构造器:
       String():            创建一个空字符序列的字符串对象(并不是返回null)
       String(byte[] bs):
                                创建一个字符串对象。使用默认字符集进行解码的字符串。
       String(byte[] bs,String charset):
                                将字节数组使用指定字符集进行解码成相应的字符串对象
       String(char[] ch):
                                将字符数组转换成字符串对象
       String(String str) : 
                                指定一个字符串字面量创建一个字符串对象
   --常用方法:
        int length(): 
                     返回字符串对象的字符个数
        char charAt(int index): 
                     获取此字符序列中指定索引处的字符
        String concat(String another):
                     将指定字符串another拼接到此字符序列的末尾(与字符串拼接符"+"功能相同),返回新对象
        boolean stratsWith(String prefix)/endsWith(String suffix)
                     查看此字符序列是否以prefix为前缀/以suffix为后缀
        byte[] getBytes():
                     将此字符串按照默认字符集编码成字节序列,返回一个新的字节数组
        byte[] getBytes(String charset)
                     将此字符串按照指定的字符集编码成字节序列,返回新的字节数组
        static String copyValueOf(char[] data):
                     将字符数组拼接成字符串(与String(char[] ch)构造器的功能相同)
  
   --查找字符串中的字符/子字符串的位置:
          int indexOf(int ch):
                     返回字符ch在此字符串中第一次出现的下标(索引/位置)
          int indexOf(int ch,int fromIndex):
                     返回字符ch从此字符串fromIndex下标开始,往后第一次出现的位置
          int indexOf(String str):
                     找出子字符串str在该字符串中第一次出现的位置
          int indexOf(String str,int fromIndex):  
                     注意:返回-1,说明要找字符/子字符串 不存在查找序列中
    
          int lastIndexOf(int ch);
                     找出字符ch在字符串中最后一次出现的位置
          int lastIndexOf(String str):
          int lastIndexOf(int ch,int fromIndex):
          int lastIndexOf(String str,int fromIndex):
                     从某个下标开始,查找字符/子字符串,最后一次出现的位置。
          
          上述四个方法:
                     查找字符/子字符串在此字符序列中最后一次出现的位置,找不到返回-1
      
 --截取子字符串的方法:
            String substring(int beginIndex)
                       从此字符序列的beginIndex开始截取,截取到最后
            String substring(int beginIndex,int endIndex)
                       从此字符序列的beginInde开始截取,截取到endIndex
         ###:包前不包后
  
 --字符串转成字符数组的方法:
              char[] toCharArray():

                            将此字符序列变成字符数组  
 
 --字符串中的字母转成大写/小写
              String toUpperCase():
                            将字符串中的字母都变成大写,返回新字符串
              String toLowerCase():
                            将字符串中的字母都变成小写,返回新字符串 

 --前后去空格的方法:
              String trim():

                            去掉此字符序列的前与后的空格 

 --将任意参数变成字符串对象
              static String valueOf(Type v):

                            将参数v变成字符串对象        

  ###:String类型中重写了equals方法
=======================================================================
*StringBuilder:可变字符串类型

     (字符串:底层是字符数组,及其对数组的操作)
     
 --特点:
      (1)此类型是final修饰的
      (2)没有重写equals方法
      (3)此类型提供的大多数方法都带有返回值,
             即:  return this  返回同一个地址
 --构造器:
    StringBuilder(): 
                             构造了一个空的StringBuilder对象,初始容量为16
    StringBuilder(String str):
                             创建一个指定字符串的StringBuilder对象
 --常用方法:
   int length():
                        返回有效字符的长度
   StringBuilder append(Type a):
                        将参数a追加到StringBuilder对象里,返回此对象
   StringBuilider insert(int index,Type a);
                        将参数a插入到对象的下标index处 
   StringBuilder  delete(int start,int end);
                        删除此对象里的部分字符,从start开始,到end结束
         ###:[包前不包后]     
   StringBuilder replace(int start,int end,String str);
                        使用str替换此对象从start开始到end结束的子串
   StringBuilder reverse():
                        将StringBuilder对象的内容进行翻转
                                            
      
*StringBuffer:此类与StringBuilder用法一模一样。
 
  ###:一旦通过StringBuffer生成了最终所想要的字符串,就可以调用他的toString()方法,
                将其转换成一个String对象.
      但是:
         在线程安全上考虑:
         StringBuffer线程安全
         StringBuilder线程不安全
         在执行效率上:
         StringBuffer效率低
         StringBuilder效率高 (通常情况下,用它创建一个内容可变的字符串对象)  
练习:测试两种类型的效率高低。


* String,StringBuilder,StringBuffer都实现了CharSequence接口,
     因此,CharSequence可认为是一个字符串协议接口.
=======================================================================

*equals方法与==的区别
       ==:用来比较是不是同一个对象,基本的数据类型和引用类型的数据都可以比较 
   equals:用来比较两个对象的内容是否相同,只能比较引用数据类型
  
========================================================================
*常量池:
    jvm在使用字符串类型时,为了提高内存的使用率,当使用字面量(常量)
           给变量赋值时,在方法区内提供了用于存储字面量对象的一个常量池。
    
 --原理:
         当使用字面量赋值时,先去方法区内的常量池中查询是否有相同字面量的对象,
         如果有,就返回常量池中对象的地址;
         如果没有,在常量池中创建此字面量的对象,
         再返回
         
-----------------------------------------------------------------------
###: 专门用于管理在编译时被确定并被保存在"已编译的.class文件"中的一些数据
     (关于类,方法,接口中的常量,字符串常量)             
=======================================================================  
  思考题:内存中有多少个对象
  String s1 = "123";
  String s2 = "456";
  String s3 = s1+s2;
  String s5 = new String("123"+"456");//堆内存中
  
  
  

猜你喜欢

转载自blog.csdn.net/yk_3215123/article/details/82931138
今日推荐