A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ak-47 中级黑马   /  2016-3-26 02:05  /  481 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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是怎么运算的啊,求大神详细说下啊

3 个回复

倒序浏览
==比较的是引用,可以比较两个对象,而equals方法比较的是内容,你对着比下,就可以出结果了
回复 使用道具 举报
腾龙3158 来自手机 中级黑马 2016-3-26 02:26:30
藤椅
在java中有常量优化机制,所以Demo 4中的s1获得的是常量“abc”的地址值,和s2的值相同,所以s1==s2为true ;而equals 比较的是字符串的字符序列是否相同,显然也是true .Demo 3中s1的值是指向堆内存的地址值,而s2是指向常量池中的地址值,所以第一个为false ,第二个为true .Demo 2中在创建s1之前,先在常量池创建一个常量对象,再在堆内存中创建s1的对象,所以是两个对象!
回复 使用道具 举报
谢谢楼上啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马