• 一、图解Java中String不可变性


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

    1、声明一个String

    String s = "abcd";


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

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

    String s2 = s;


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

    3、连接String

    s = s.concat("ef");


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

    string不可变引用3

    总结:
    一旦一个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;
        }
  • 相关阅读:
    HDU 5883 F
    关于codeblock 为什么不能调试
    Codeforces Round #378 (Div. 2) D. Kostya the Sculptor 分组 + 贪心
    51NOD 区间的价值 V2
    NYOJ 42 一笔画问题
    如何对二维字符数组进行排序
    hihoCoder 1383 : The Book List 北京网络赛
    利用IDA学习一个简单的安卓脱壳
    iOS APP可执行文件的组成
    Mac10.11 搭建php开发环境
  • 原文地址:https://www.cnblogs.com/seaspring/p/5268239.html
Copyright © 2020-2023  润新知