java --String、StringBuffer、StringBuilder

 

一、String

 *1、String类型的值,会在方法去内存中存放,没有新的String类型的值,都会在方法区内存存放一份。

 *2、String值是不可更改的,如果要更改String类型的值,实际上不是修改,而是创建一个信息的String类型的值。

 *3、如果是new String()值,则会在方法区的字符串常量池+堆内存中都会有存放此String类型的值。

 

 

二、StringBuffer

* 1、StringBuffer是可变长度的,自动扩容。因为StringBuffer也是通过数组表示,所以其扩容其实还是创建新的数据,将原数组内容拷贝到新数组
* 2、StringBuffer无参数构造方法,会调用super(16)所以,调用无参数构造方法时,默认创建空间的长度16个字符
* 3、通过送具体的长度参数,这样就可以创建任意长度的字符空间
* 4、对于String类型,频繁的拼接,会在字符串常量池创建大量的字符串,所以会占用大量空间。所以对于需要频繁拼接字符串时,建议通过StringBuffer来实现
不要通过String来拼接
* 5、StringBuffer与String没有继承关系,所以这两个引用数据类型不能直接转换,或者强制转换
* 6、StringBuffer有重写toString方法,否则就会返回内存地址


public class Test01
{
    public static void main(String[] args) {
        
        //StringBuffer与String类没有继承关系,所以不能直接转换/强制类型转换
        //StringBuffer a = "abc";
        
        //StringBuffer正确的创建方式
        StringBuffer b = new StringBuffer("abc");
        System.out.println(b); //abc , StringBuffer有重写toString方法
        
        //String在字符串常量池中一段创建,不得修改
        String s1 = "abc";
        String s2 = s1.replace("a", "x");
        System.out.println(s1 == s2); //false(是两个地址)
        
        //StringBuffer的长度可变,在字符创常量池中创建后可以修改
        StringBuffer sb1 = new StringBuffer("abc");
        StringBuffer sb2 = sb1.append("123");
        System.out.println(sb1 == sb2); //true(是一个地址)
        
        //、大量字符串进行拼接时,尽量避免使用String,建议StringBuffer、StringBuilder
        //比如我们要查询的表1:user, 条件 where userid=1
        String table1 = "user";
        StringBuffer sqlSelect = new StringBuffer(100);
        
        sqlSelect = sqlSelect.append("select * from ").append(table1).append(" where userid =1"); 
        System.out.println(sqlSelect); //select * from user where userid =1
    }
}

StringBuffer常用方法

参考一下被人的文章吧

https://www.cnblogs.com/haitiansBlog/p/4889532.html

 

 

三、StringBuilder

..后续完善

posted on 2021-03-06 17:35  jesse_zhao  阅读(65)  评论(0编辑  收藏  举报

导航