• Subtring方法在JDK6 和JDK7


    1, subtring在JDK6中:

    String是有字符数组组成的,在JDK6中,String 类包含3个属性,char value[], int offset, int count. 它们被用作存储真正的字符数组,数组的第一个索引,String中字符的个数。

    当调用substring()方法时,将创建一个新的字符串,但是字符串的值仍旧是指向堆中相同的字符数组,这两个字符串所不同的是他们的count和offset的值。

    下面的代码简单的并且之包含重点的解释这这个问题。

    //JDK 6
    String(int offset, int count, char value[]) {
        this.value = value;
        this.offset = offset;
        this.count = count;
    }
     
    public String substring(int beginIndex, int endIndex) {
        //check boundary
        return  new String(offset + beginIndex, endIndex - beginIndex, value);
    }

    2, JDK6中substring方法存在的问题。

    如果你有一个非常长的字符串,但是你仅仅需要这个字符串的一小部分,然而使用substring时,这将导致性能问题,既然你只想要一小部分,你却保存了这个thing。在JDK6中,使用如下的解决方案解决这个问题:

    x = x.substring(x, y) + ""

    3,JDK7中substring方法

    在JDK7中substring得到了改进,substring方法实际上在堆中创建了一个新的字符数组。

    //JDK 7
    public String(char value[], int offset, int count) {
        //check boundary
        this.value = Arrays.copyOfRange(value, offset, offset + count);
    }
     
    public String substring(int beginIndex, int endIndex) {
        //check boundary
        int subLen = endIndex - beginIndex;
        return new String(value, beginIndex, subLen);
    }

     

     

  • 相关阅读:
    自己的文件管理软件,想怎样分类管理就怎样分类
    给博客园发展支点招
    看看自己存在哪些的个人知识管理问题和烦恼呢?
    2008年个人知识管理软件测评[草稿]
    獲取某天是星期幾
    創建鏈接服務器
    在.NET中调用Oracle9i存储过程经验总结
    C#转换成VB.net或vb.net转换成C#
    話說我們家姚明
    解决winxp搜索不到文件的问题!
  • 原文地址:https://www.cnblogs.com/zhonghan/p/3675744.html
Copyright © 2020-2023  润新知