public class Test {
public static void main(String args[]) {
String a = "abc";// a 的地址指向"abc"
String b = "ab";// b的地址指向"ab"
String c = b + "c";// c的地址指向一个新的"abc"
System.out.println(a == c);// 输出a 的地址与 c的地址相比较的结果
System.out.println(a.equals(c));
a = "ab";// a 的地址指向"ab"
b = "a" + "b";// b的地址??
System.out.println(a == b);
}
}
此程序的结果是这样的
false
true
true最后a 与 b相比较的结果是true,也就是说在b = "a" + "b"之后b与a指向的地址相同,这是为什么??b = "a" + "b"不会为b重新分配一个地址吗??
谁能具体说一下String在内存中是如何储存的?
public static void main(String args[]) {
String a = "abc";// a 的地址指向"abc"
String b = "ab";// b的地址指向"ab"
String c = b + "c";// c的地址指向一个新的"abc"
System.out.println(a == c);// 输出a 的地址与 c的地址相比较的结果
System.out.println(a.equals(c));
a = "ab";// a 的地址指向"ab"
b = "a" + "b";// b的地址??
System.out.println(a == b);
}
}
此程序的结果是这样的
false
true
true最后a 与 b相比较的结果是true,也就是说在b = "a" + "b"之后b与a指向的地址相同,这是为什么??b = "a" + "b"不会为b重新分配一个地址吗??
谁能具体说一下String在内存中是如何储存的?
public static void main(String args[]) {
String a = "abc";// a 的地址指向"abc"
String b = "ab";// b的地址指向"ab"
String c = b + "c";// c的地址指向一个新的"abc"
System.out.println(a == c);// 输出a 的地址与 c的地址相比较的结果
System.out.println(a.equals(c));
a = "ab";// a 的地址指向"ab"
b = "a" + "b";// b的地址??
System.out.println(a == b);
}
}
public static void main(String args[]) {
String a = "abc";// a 的地址指向"abc"
String b = "ab";// b的地址指向"ab"
String c = b + "c";// c的地址指向一个新的"abc"
System.out.println(a == c);// 输出a 的地址与 c的地址相比较的结果
System.out.println(a.equals(c));
a = "ab";// a 的地址指向"ab"
b = "a" + "b";// b的地址??
System.out.println(a == b);
}
}
import java.io.PrintStream;public class Test
{ public Test()
{
} public static void main(String args[])
{
String a = "abc";
String b = "ab";
String c = (new StringBuilder(String.valueOf(b))).append("c").toString();
System.out.println(a == c);
System.out.println(a.equals(c));
a = "ab";
b = "ab";//此处,a 与 b 是完全相同的内容,JVM自动优化的代码格式.
System.out.println(a == b);
}
}String这个类有点特殊,有时可以将它近似地看作基本类型,有时又必须将两者区分开.
当String a = "stringOfContent"时,这种形式可以近似地看作基本类型,时行“==”比较时,只比较String的内容是否相同.String a = "stringOfContent";
String b = "stringOfContent";
Sysout(a == b);//结果为true,只比较内容,不比较地址,可以理解为JVM自动优化a,b使它们同时指向了"stringOfContent"这段存储空间,也就相当地址一样了.当String b = new String("stringOfContent");时,必须以构造新类的思想来看待.
String a = new String("stringOfContent");
String b = new String("stringOfContent");Sysout(a == b);//输出为false,因为Jvm已通过构造函数为a,b分配了不同的存储空间.