1.1. String不可变性

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

声明一个String:

String s = "abcd";
图示如下:

Paste_Image.png

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

给String 变量赋值为另一个String 变量

String s2 = s;

Paste_Image.png

变量s2 保存这相同引用的值,它们都指向了同一对象的值。

String连接

s = s.concat("ef");
变量s 现在保存的是新创建的sting对象的引用,如图:

Paste_Image.png

总结

一旦一个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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 28,461评论 5 19
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,972评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,403评论 0 3
  • 2017年5月20日 农历四月二十五 星期六 【早睡早起】 昨晚11:00睡,今早4:00起床。 【学佛】 1...
    陳境墨阅读 2,669评论 1 2
  • 跟史玉柱学了一招,使我轻轻松松年入50万 昨天我说到了和一些其他店的合作事情,其实我还有一个很重要的合作。我们发现...
    东东说阅读 1,761评论 0 1