• 一、图解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;
        }
  • 相关阅读:
    sipp如何避免dead call
    6174问题
    笨小熊
    scanf 与 cin 的区别
    谁获得了最高奖学金
    _int64、long long 的区别
    小光棍数
    简单排序法
    La=LaULb (循环链表)
    删除重复的数(顺序有序表)
  • 原文地址:https://www.cnblogs.com/seaspring/p/5268239.html
Copyright © 2020-2023  润新知