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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lixiaoming 中级黑马   /  2015-6-15 23:11  /  2398 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
                  主代码:
                    String s1 = new String("hello");
                    String s2 = new String("hello");
                    System.out.println(s1==s2);
                    System.out.println(s1.equals(s2));

                    String s3 = new String("hello");
                    String s4 = "hello";
                    System.out.println(s3==s4);
                    System.out.println(s3.equals(s4));

                    String s5 = "hello";
                    String s6 = "hello";
                    System.out.println(s5==s6);
                    System.out.println(s5.equals(s6));

最佳答案

查看完整内容

输出的分别是false true false true true, true 。 因为new一下就会在堆内存中开辟一个空间,就会有不同的地址值,所以前两个==比的是地址值是不同的,通过.equals比的是常量池中的数字,他们是同一个hello,所以相同。最后一个比的都是常量池中的值是一样的所以true

5 个回复

倒序浏览
输出的分别是false  true  false  true   true,  true 。 因为new一下就会在堆内存中开辟一个空间,就会有不同的地址值,所以前两个==比的是地址值是不同的,通过.equals比的是常量池中的数字,他们是同一个hello,所以相同。最后一个比的都是常量池中的值是一样的所以true

评分

参与人数 1黑马币 +5 收起 理由
lixiaoming + 5 赞一个!

查看全部评分

回复 使用道具 举报
只要记住new对象的时候是要在内存中新开辟空间的,new出两个同样值的对象,两个对象的值存放的地址是不一样的,另外要记住==是比较的地址,equals()比较的是内容,遇到这类问题,那都不是个事

点评

给力!  发表于 2015-6-17 23:34
回复 使用道具 举报
学习中。。。。菜鸟飘过
回复 使用道具 举报
一楼正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马