字符串转换对比原始字符串和字符串值的输出

时间:2016-07-26 12:35:46

标签: java string

在下面提到的程序中,字符串和原始值的对比输出。这是如何内部工作的?

public class Test {

    public static void main(String[] args) {

        String s1 = String.valueOf(99);
        String s2 = String.valueOf(99);
        System.out.println(s1==s2); //returns false, why??

         s1 = String.valueOf("99");
     s2 = String.valueOf("99");
        System.out.println(s1==s2);  //returns true, why??


}
}   

1 个答案:

答案 0 :(得分:3)

String.valueOf("99")会返回传递给它的同一个实例(因为valueOf(Object obj)会返回Object' s totStringString' s toString返回this)。由于两个"99"字符串都是同一个实例(由于String池),因此对String.valueOf("99")的两次调用都返回相同的实例。

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

/**
 * This object (which is already a string!) is itself returned.
 *
 * @return  the string itself.
 */
public String toString() {
    return this;
}

另一方面,每次调用String.valueOf(99)都会调用Integer.toString(99),这会产生一个新的String实例。

public static String valueOf(int i) {
    return Integer.toString(i);
}

public static String toString(int i) {
    if (i == Integer.MIN_VALUE)
        return "-2147483648";
    int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
    char[] buf = new char[size];
    getChars(i, size, buf);
    return new String(buf, true);
}