String s = "yz";
String s1 = "xyz";
String s2 = "x"+"yz";
String s3 = "x"+new String("yz");
String s4=new String("xyz");
String s5 = "x"+s;
System.out.println(s1==s2);true
System.out.println(s1==s3);false
System.out.println(s1==s4);false
System.out.println(s4==s3);false
System.out.println(s2==s5);false能详细解释下么?
String s1 = "xyz";
String s2 = "x"+"yz";
String s3 = "x"+new String("yz");
String s4=new String("xyz");
String s5 = "x"+s;
System.out.println(s1==s2);true
System.out.println(s1==s3);false
System.out.println(s1==s4);false
System.out.println(s4==s3);false
System.out.println(s2==s5);false能详细解释下么?
但是NEW的时候是创建一个新的内存空间然后指向这个值.String s1="1",s2="1" 这种赋值是先在查找字符串池中找有没有值 有的话直接引用同一个地址,没有的话另外开辟例如:
s1==s2 返回true --这个比较的是内存地址而不是值
s1.equals(s2)返回true --这个比较的是内容不是内存地址
但是如果是 new String("1") new String("1") 他们2个==时返回FALSE equals返回true
String s3 = "x"+new String("yz");
的区别就知道怎么回事了
s2=="x"+new String("y");然后用==和equals 总之==比较内存地址,equals比较值
用字面量的形式声明的字符串是存放到栈中的,栈中字符串池是可复用的,上述描述中是s1.s2是位于同一个内存地址
new出来的String都是在堆中新开辟一片空间的,内存地址是不一样的,上述描述中s3,s4,s5都是在堆中新产生一个对象,内存地址并不一样,只是内容相同而已
==操作符会返回true如果一些引用指向一个相同的对象但不会判断String对象的内容是否相同
==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。
String.equals()方法会返回true如果被操作的String对象的内容相同。
s1.equals(s2)返回true --这个比较的是内容不是内存地址
这是创建另一个内存.