java_关于字符串类型及常量池

StringBuilder:可变字符串类型
*(字符串:底层是字符数组,及其对数组的操作)
特点:

    (1)由final修饰
    (2)没有重写equals方法
    (3)此类型提供的大多数方法都带有返回值

构造器

    StringBuilder()构造了一个空的字符串生成器,初始容量为16个字符。

    *StringBuilder(String str)
    *此构造器的作用是创建制定字符串的StringBuilder对象

常用方法:
    int length();
        返回有效字符的长度
    StringBuilder append(Type a);
        将参数a追加到StringBuilder对象里,返回此对象
    StringBuilder insert(int index, Type a);
        将参数a插入到StringBuilder对象的下标index处,返回此对象
    StringBuilder delete(int start, int end);
        删除StringBuilder对象中的[start,end)中的内容
    StringBuilder replace(int start, int end, String str)
        使用str替换StringBuilder对象中[start, end)的内容
    StringBuilder reverse();
        将对象的字符串数组进行翻转

StringBuffer:与StringBuilder 用法一模一样
但是(区别):
在线程安全上考虑:StringBuffer线程安全,StringBuilder线程不安全
在执行效率上:StringBuffer效率低,StringBuilder效率高

===========================================================
String:(底层是字符数组+对数组的操作)
特点:
(1)是不可变的字符串类型(不可变:对象的内容不能更改)
(2)是final修饰的类型,不能被重写
(3)字符索引(下标)从0开始
(4)重写了equals方法和toString方法
(5)默认使用Unicode字符集,任意字符都占2个字节

构造器:

    String();
    创建一个String对象,使其表示空字符序列。
    String(byte[] bs);
    创建一个字符串对象,使用默认字符集进行解码的字符串
    String(byte[] bs, String charset);
    使用指定字符集进行解码的字符串
    String(char[] ch)
    将字符数组转换为字符串
    String(String str);
    指定一个字符串字面量转换成字符串

常用方法:

    int length();
    返回字符串对象的字符个数
    *数组的length与字符串的length()的区别;
        *数组的length是属性:值为元素的个数
        *字符串的length是方法:返回的是字符串对象的字符个数

    char charAt(int index);
    返回此字符序列指定索引的字符
    String concat(String str);
    将将指定的字符串连接到该字符串的末尾。
    boolean startsWith(String prefix)
    测试此字符串是否以指定的前缀prefix开头。
    boolean endsWith(String suffix)
    测试此字符串是否以指定的后缀suffix结尾。
    byte[] getBytes() 
    使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。


    查找字符串中字符/子字符串的位置
    int indexOf(int ch) 
    返回指定字符ch第一次出现的字符串内的索引(下标)。 
    int indexOf(int ch, int fromIndex) 
    返回指定字符ch第一次出现的字符串内的索引,以指定的索引fromindex开始搜索。
注意:返回-1说明要查找的字符不存在
    int indexOf(String str) 
    int indexOf(String str, int fromIndex)
    返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。
    int lastIndexOf(int ch)
    int lastIndexOf(int ch, int fromIndex)
    返回指定字符的最后一次出现的字符串中的索引.从指定的索引开始向左找

    String substring(int beginIndex) 
    返回一个字符串,该字符串是此字符串的子字符串。 [beginIndex,length-1]
    String substring(int beginIndex, int endIndex) 
    返回一个字符串,该字符串是此字符串的子字符串。 [beginIndex,endIndex)

    char[] toCharArray()
    将此字符串转换为新的字符数组。
    (注:字符数组变量直接做输出时,输出的不是地址,而是元素直接拼接成的字符串)

    String toLowerCase() 
    将所有在此字符 String使用默认语言环境的规则小写。
    String toUpperCase() 
    将所有在此字符 String使用默认语言环境的规则大写。

    String trim() 
    返回一个字符串,其值为原字符串,并删除任何前导和尾随空格。

    static String valueOf(Type v)
    将参数v变成字符串

    equals与==的区别
    ==用来比较是不是同一个对象
    equals用来比较两个对象的内容是否相同

    String类型中重写了equals()

总结::

String,Stringbuilder, StringBuffer
(1)都是final修饰的类
(2)String是不可变字符串类型, 其余两个可变
(3)String重写了equals(),其他两个没有重写
(4)StringBuilder线程不安全,但是效率高
(5)StringBuffer线程安全,但是效率低
(6)若涉及大量字符串拼接操作,尽可能使用后两个

常量池:

    jvm在使用字符串类型时,为了提高内存的使用率,当使用字面量(常量)进行给变量赋值时,提供了一个用于存储字面量对象的一个常量池
    原理:当使用字面量赋值时,先去方法区内的常量池中查询,是否有相同的对象,有就返回常量池中对象的地址,没有就在常量池中创建这个对象
    常量池的位置:
    jdk1.7以后,由于方法区内存相对较小,将常量池移至堆中

猜你喜欢

转载自blog.csdn.net/yc_hen/article/details/81673065