黑马程序员技术交流社区

标题: 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