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能详细解释下么?
解决方案 »
- 求思路,求方法
- 请问谁知道在treegrid控件后面加gantt图吗
- 匹配单一字符重复出现的正则表达式是什么??
- 有1个jar包,也有源文件。修改了源文件里的一个java文件后,重打的包,怎么没效果呢?
- 个个关于“101我爱你”的字符串的显示输出问题
- java.net.MalformedURLException: no protocol:错误,请高手指点迷津
- JSP中嵌套struts标签的问题
- 求加密算法:用JAVA实现apache的htpasswd功能
- RMI的问题,怎么没人回答那??
- 谁能告诉我这段话到底说明了什么问题。先给30分,准备加到60分。
- 这个为什么错了(随机数)
- swing开发的gui一定要装jdk吗?
但是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 --这个比较的是内容不是内存地址
这是创建另一个内存.