黑马程序员技术交流社区
标题:
String类的难题求大神出手
[打印本页]
作者:
Ak-47
时间:
2016-3-26 02:05
标题:
String类的难题求大神出手
private static void demo4() {
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
----------------------------------------------------
private static void demo3() {
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
--------------------------------------------
//创建了几个对象?
private static void demo2() {
String s1 = new String("abc");
System.out.println(s1);
}
我看了,感觉怎么有点不知道怎么做啊,完全搞不懂这个String是怎么运算的啊,求大神详细说下啊
作者:
zhoubinjian
时间:
2016-3-26 02:17
==比较的是引用,可以比较两个对象,而equals方法比较的是内容,你对着比下,就可以出结果了
作者:
腾龙3158
时间:
2016-3-26 02:26
在java中有常量优化机制,所以Demo 4中的s1获得的是常量“abc”的地址值,和s2的值相同,所以s1==s2为true ;而equals 比较的是字符串的字符序列是否相同,显然也是true .Demo 3中s1的值是指向堆内存的地址值,而s2是指向常量池中的地址值,所以第一个为false ,第二个为true .Demo 2中在创建s1之前,先在常量池创建一个常量对象,再在堆内存中创建s1的对象,所以是两个对象!
作者:
Ak-47
时间:
2016-3-27 00:34
谢谢楼上啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2