所以我读过,如果你这样写:比较字符串
String a="foo";
String b="foo";
System.out.println(a==b);
它会打印“真”,因为第一个实施检查存储池寻找“ foo“,它无法找到它,因此它会创建一个新对象并将foo放入内存池中,然后每个其他字符串都将指向同一个对象。
,如果你写:
String a="foo";
String b=new String("foo");
System.out.println(a==b);
它会打印出“假”,因为你强制创建为B A新的对象,因此它不会把它从池。
我的问题是,如果你这样写:
String a=new String("foo");
String b="foo";
System.out.println(a==b);
为何仍打印“假”?我的意思是“a”创建一个新的对象,不会查找内存池,但是b应该查看内存池并找到创建的对象“a”并指向它。我在这里错过了什么? 谢谢。
一个不在记忆池,因此a和b都指向DIF引用.... –
'字符串一个新=字符串( “富”);'创建2个对象。首先创建'“foo”',然后用'new String'创建另一个。 – marstran
这很容易,我们有一个字符串池用于字符串的目的,和对象的对象池,您不能比较字符串池中的字符串与对象池中的字符串对象使用==直接 – PSo