一图解Java中String不可变性

Posted 尧字节

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一图解Java中String不可变性相关的知识,希望对你有一定的参考价值。

这里有一堆例子来说明Java的String的不可变性。

1、声明一个String

String s = "abcd";


技术分享
s 变量保存string对象的引用,下面的箭头解释成保存了哪个对象的引用。

 

2、 给一个String 变量赋值为另外一个String 变量。

String s2 = s;


String对象不可变展示2变量s2 保存这相同引用的值,它们都指向了同一对象的值。

 

3、连接String

 

s = s.concat("ef");


变量s 现在保存的是新创建的sting对象的引用。

 

技术分享

总结:
一旦一个string 被在内存(堆)中创建,它就是不可以被改变的。我们应该注意的是所有的String方法都不会改变一个string的本身,而是返回一个新的string。

如果我们需要一个可以被改变的string,那么我们可以使用StringBuffer(译者注:线程安全)或StringBuilder。否则每创建一个新的string的时候,会浪费大量的时间在垃圾收集上。

这里有个StringBuilder的应用例子。

public static String readFileToString() throws IOException {
        File dirs = new File(".");
        String filePath = dirs.getCanonicalPath() + File.separator+"src"+File.separator+"TestRead.java";
 
        StringBuilder fileData = new StringBuilder(1000);//Constructs a string buffer with no characters in it and the specified initial capacity
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
 
        char[] buf = new char[1024];
        int numRead = 0;
        while ((numRead = reader.read(buf)) != -1) {
            String readData = String.valueOf(buf, 0, numRead);
            fileData.append(readData);
            buf = new char[1024];
        }
 
        reader.close();
 
        String returnStr = fileData.toString();
        System.out.println(returnStr);
        return returnStr;
    }

以上是关于一图解Java中String不可变性的主要内容,如果未能解决你的问题,请参考以下文章

java中的String类的不可变性的小例子

Java常用类--String类(String的不可变性 & 字符串常量池 & 享元模式)

Java基础JAVA不可变类(immutable)机制与String的不可变性

Java基础:String不可变性和final修饰

JAVA不可变类(immutable)机制与String的不可变性

String不可变性