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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋映辉 中级黑马   /  2012-5-5 11:10  /  2770 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                                String a="asd";
                System.out.println(a.equals("asd"));
                System.out.println(a=="asd");
                String b=new String("asd");
                System.out.println(b.equals("asd"));
                System.out.println(b=="asd");
                String c=“asd”;
                System.out.println(b.equals(c));
                System.out.println(b==c);
    运行结果是
true
true
true
false
true
false
  在书上对于==的解释:如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同)只要两个变量的值相等,就将返回true  那为什么b=="asd"返回的是false呢?
而按道理 a应该是保存在常量池中,b应该堆内存中,他们怎么又相等呢?

               

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

8 个回复

倒序浏览
asd也是一个对象,两者指向同一个引用
回复 使用道具 举报
第二次回答这个问题了   其实很简单的   
1 相等性的比较 (== )
   a  对于原生数据类型来说,比较的是左右两边的值是否相等。
  b  对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
2  equals()方法,该方法定义在Object 类当中,因此Java  中的每个类都具有该方法,对于Object 类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于 Object 类的equals()方法来说,它等价于==。
3  对于 String  类的 equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。 对于String 对象的相等性判断来说,请使用equals()方法,而不要使用== 。

点评

懂了 谢谢  发表于 2012-5-5 11:43
忽然发现,String 不是基本数据类型,好像抓住了点什么,容我想想  发表于 2012-5-5 11:41

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
贠(yun)靖 + 1
蒋映辉 + 2 很给力!

查看全部评分

回复 使用道具 举报
                String a="asd";//直接到String池中去找字符“asd”
                System.out.println(a.equals("asd"));//内容相同,true
                System.out.println(a=="asd");//内容、地址都相同,true
                String b=new String("asd");//new了一个对象,在堆中开辟空间,有了新的地址
                System.out.println(b.equals("asd"));//内容相同,true
                System.out.println(b=="asd");//地址不同,false
                String c=“asd”;//直接到String池中去找字符“asd”
                System.out.println(b.equals(c));//内容相同,true
                System.out.println(b==c);//地址不同,false

点评

嗯嗯 你说的是对的 理解了 灰常感谢  发表于 2012-5-5 11:42
==不是只判断是否相等么,怎么又扯到地址上去了?equals才要判断地址吧  发表于 2012-5-5 11:40

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
贠(yun)靖 + 1
蒋映辉 + 2 很给力!

查看全部评分

回复 使用道具 举报
马浩 发表于 2012-5-5 11:31
String a="asd";//直接到String池中去找字符“asd”
                System.out.println( ...

你弄反了吧,==是要地址内容都相同的
回复 使用道具 举报
==比较的地址,equals比较内容
回复 使用道具 举报
胡奎 发表于 2012-5-5 11:55
==比较的地址,equals比较内容

这样说就不对了 哥们   前提是要看是否重写没重写equals方法   String类重写了Object的equals方法 才比较的是内容的    如果没有重写的话呢?
回复 使用道具 举报
贠(yun)靖 发表于 2012-5-5 12:22
这样说就不对了 哥们   前提是要看是否重写没重写equals方法   String类重写了Object的equals方法 才比较 ...

恩,说的是,我错了
回复 使用道具 举报
受益匪浅!!以前真是没注意这个问题呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马