String s1 = "String";
String s2 = "String";
System.out.println(s1 == s2 ); //true
System.out.println(s1.equals(s2));//true
String s1 = "String";
这种方式,java首先会在缓冲区查找是否有"String"这个常量对象,有就直接将其地址赋给s1,没有就创建一个"String",然后将其赋给s1;然后
String s2 = "String";
java同样会在缓冲区中查找"String",这次能查找到了,因为s1创建了一个"String",所以会将其地址赋给s2,如此,s1和s2便有了相同的地址。
String s3 = new String("String");
String s4 = new String("String");
System.out.println(s3 == s4); //false
System.out.println(s3.equals(s4));//true
String s3 = new String("String");会直接在内存中开辟一个空间存储一个"String",并讲引用赋给s3;
同样 String s4 = new String("String");也会开辟一个空间,降低至给s4;
所以s3和s4的地址不一样。







网友评论