服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java string 的 equals() 方法可能的优化


jdk1.4, 1.5 的 string class 代码如下











[code]











public final class string











    implements java.io.serializable, comparable<string>, charsequence











{











    /** the value is used for character storage. */











    private final char value[];












 


 



 



    /** the offset is the first index of the storage that is used. */











    private final int offset;












 


 



 



    /** the count is the number of characters in the string. */











    private final int count;











[/code]












 


 



 



[code]











    /**











     * initializes a newly created <code>string</code> object so that it











     * represents the same sequence of characters as the argument; in other











     * words, the newly created string is a copy of the argument string. unless











     * an explicit copy of <code>original</code> is needed, use of this











     * constructor is unnecessary since strings are immutable.











     *











     * @param   original   a <code>string</code>.











     */











    public string(string original) {











            int size = original.count;











            char[] originalvalue = original.value;











            char[] v;











            if (originalvalue.length > size) {











                // the array representing the string is bigger than the new











                // string itself.  perhaps this constructor is being called











                // in order to trim the baggage, so make a copy of the array.











                v = new char[size];











                system.arraycopy(originalvalue, original.offset, v, 0, size);











            } else {











                // the array representing the string is the same











                // size as the string, so no point in making a copy.











                v = originalvalue;











            }











            this.offset = 0;











            this.count = size;











            this.value = v;











    }











[/code]











从这段构造函数中,我们可以看出,不同reference的string之间有可能共享相同的 char[]。












 


 



 



[code]











    /**











     * compares this string to the specified object.











     * the result is <code>true</code> if and only if the argument is not











     * <code>null</code> and is a <code>string</code> object that represents











     * the same sequence of characters as this object.











     *











     * @param   anobject   the object to compare this <code>string</code>











     *                     against.











     * @return  <code>true</code> if the <code>string </code>are equal;











     *          <code>false</code> otherwise.











     * @see     java.lang.string#compareto(java.lang.string)











     * @see     java.lang.string#equalsignorecase(java.lang.string)











     */











    public boolean equals(object anobject) {











            if (this == anobject) {











                return true;











            }