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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
   string s1="aaa";
   string s2= new  string("aaa");
判断 s1==s2和s1.equals(s2)的结果是真是假?------并解释!!(求积分!)

---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 上官睿鹏 于 2014-3-22 12:32 编辑

==比较的是对象引用s1,s2内存中的的地址,因为s2是明确用了new,所以内存中会给它重新分配一个地址,而不是去找以前存在的s1的地址,所以会返回false。如果是String s2 = "aaa";那么用==比较就会返回true,因为内存中已经存在“aaa”了所以不会给你创建新的。String类中重写了父类中的equals()方法,在这里equals比较的是s1和s2的值。所以返回的是true。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
== 比较的是地址   equals 比较的是值     说以结果为 false    true

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
s1==s2的结果是false
因为直接赋值字符串和通过new操作创建字符串所创建的对象引用对应着堆内存的不同位置,而s1,s2分别指向它们在堆内存中的地址,所以不相等。
s1.equals(s2)的结果是true
equals比较的是内容,因为s1,s2两个对象所指向的字符串内容一样,所以相等

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
因为s1是一个对象,s2 是两个对象。String s2 = new String(“aaa”)  这句话的意思是说,s2 有两个对象 一个是aaa   另一个是new出来的  所以s1与s2 不相等    如果s1 是这么写的  String s1 = new String(“aaa”)  那么他们就像等,或者是String s2 = “aaa”   这样也行   他们也相等,所以对象间的比较一定要小心,要是还不理解再问我,我在跟你说,努力哦

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
楼主,你连String都写错了,S要大写!
Java严格区分大小写啊!


  1. class Test {
  2.     public static void main(String[] args) {
  3.         String s1 = "aaa";
  4.         String s2 = new String("aaa");
  5.         System.out.println(s1 == s2);    //输出false
  6.         System.out.println(s1.equals(s2)); //输出true
  7.     }
  8. }
复制代码

结果看注释,
原因简单理解就是,equals比较内容,==还比较地址,
具体你要理解s1和s2在内存中是怎样情况才行。
建议你还是看一下老师的教学视频。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
上官睿鹏 发表于 2014-3-22 12:30
==比较的是对象引用s1,s2内存中的的地址,因为s2是明确用了new,所以内存中会给它重新分配一个地址,而不是 ...

恩!谢谢!我零基础,初学者,有些地方要反复看好几遍才能理解,真想尽快去黑马啊:Q
回复 使用道具 举报
linweiwen 发表于 2014-3-22 13:10
楼主,你连String都写错了,S要大写!
Java严格区分大小写啊!

恩恩,我知道哈,主要问的是区别,不过谢谢你的指正!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马