Java 字符串转换-原语和字符串值的对比输出
在下面提到的程序中,对比字符串和原语值的输出。这在内部是如何工作的Java 字符串转换-原语和字符串值的对比输出,java,string,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??
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??
}
}
String.valueOf(“99”)
返回传递给它的相同实例(因为valueOf(Object obj)
返回对象的totString
和String
的toString
返回此)。由于两个“99”
字符串都是相同的实例(由于字符串
池),因此对字符串.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;
}
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);
}
另一方面,对String.valueOf(99)
的每次调用都会调用Integer.toString(99)
,从而生成一个新的String
实例
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;
}
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);
}
public静态字符串值of(int i){
返回整数.toString(i);
}
公共静态字符串toString(int i){
if(i==Integer.MIN_值)
返回“-2147483648”;
int size=(i<0)?stringSize(-i)+1:stringSize(i);
char[]buf=新字符[大小];
getChars(i,大小,buf);
返回新字符串(buf,true);
}
@Jon我认为这不是一个合适的骗局。我的意思是,当然,你不会像这样比较字符串值;但这并不能解释为什么引用在一种情况下是相同的,而在另一种情况下是不同的。@AndyTurner:你可能是对的。重新开始。这不是重复的问题。根据选择字符串或基元类型作为参数,输出会有所不同。