String str = "a";
这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建
如果你以后还用到"a"这个字符串的话并且是这样用:
String str1 = "a";
String str2 = "a";
String str2 = "a";
这4个变量都共享一个字符串"a"
而String str = new String("a");
是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str
这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建
如果你以后还用到"a"这个字符串的话并且是这样用:
String str1 = "a";
String str2 = "a";
String str2 = "a";
这4个变量都共享一个字符串"a"
而String str = new String("a");
是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str
String 比较特殊一点
如果说String str1 = "a";,
不是创建对象的话,那么为什么str1.length() indexOf(),等函数还可以使用呢?
String str1 = "a";
"a"本身是一个String的对象
这个语句只不过是把对象"a"的引用赋值给str1
并不产生新的String对象
String str = "a" 引用
public static void main(String args[]){
String a = "a";
String b = "a";
String newa = new String("a");
String newb = new String("a");
if (a == b){
System.out.println("1");
}
if (a.equals(b)){
System.out.println("2");
}
if (newa == newb){
System.out.println("3");
}
if (newa.equals(newb)){
System.out.println("4");
}
if (a == newa){
System.out.println("5");
}
if (a.equals(newa)){
System.out.println("6");
}
}
}输出:
1
2
4
6说明:用了New的话会分配单独的内存空间。用“==”是比较两对象的地址和值,而用“.equals()”仅仅是比较了两对象的值。
首先"a"是个String对象,
它是个常量,初始化时分配一块内存
String str1 = "a";
String str2 = "a";
String str3 = "a";
只是对"a"的引用,str1,str2,str3都指向"a"的内存地址。
为什么能用length(),indexOf()方法?"a"是String常量啊。
给一个字副串初始化;String s=new String("aa");
你可以把"String"看做一个类 s是类的一个对象!!
String str2 = "a";
String str3 = "a";如果把str2改为"b",与"a"不一样的值,str2不指向str1了。
或构造新的,或指向已有的字符串"b"的内存地址