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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高贵杰 中级黑马   /  2013-3-11 17:53  /  2501 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高贵杰 于 2013-3-11 20:57 编辑

public class AnimalFarm {
public static void main(String[] args) {
  final String pig = "length:10";
  final String dog = "length:"+pig.length();
  System.out.println("Animals are equals:"+ pig==dog);
  System.out.println("Animals are equals:"+ pig.equals(dog));
}
}
输出结果:
false
Animals are equals:false

这个程序是我在一本书上看到的,虽然很简单,但是我的疑惑却很多,
System.out.println("Animals are equals:"+ pig==dog);该语句输出false。
第一:pig与dog比较的是length()值,用“==”比较应该输出ture,但是却输出了false。
第二:只输出了false,并没有输出"Animals are equals:"这个字符串,为什么会这样?
第三:在下面一句System.out.println("Animals are equals:"+ pig.equals(dog));中,equals的比较也输出了false。为什么?

这个小程序很让我纠结,希望,大家能帮我解惑。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

8 个回复

倒序浏览
==”操作符专门用于比较两个变量的值是否相等,
也就是用于比较变量所对应的内存中所存储的数值是否相同,
要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

equals”方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,
它比较的两个对象是独立的。

看如下代码:
  1. public class AnimalFarm
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.            final String pig = "length:10";
  6.            final String dog = "length:"+pig.length();
  7.            System.out.println(pig);
  8.            System.out.println(dog);
  9.            System.out.println("Animals are equals:"+(pig==dog));
  10.            System.out.println("Animals are equals:"+pig.equals(dog));
  11.      }
  12. }
复制代码
结果:


回答你的第一个问题:
看代码,分别打印下pig和dog的值。发现一个是10,一个是9.而“==”比较的是变量的值。不相等。则false!

第二个问题:
  1. System.out.println("Animals are equals:"+(pig==dog));
复制代码
第三个问题:
“equals”比较的两个独立对象,而pig和dog是常量,要比较相同用“==”。。所以为false!

OK...希望能帮到你!!


点评

哦,好吧,我错了,运算优先级都给弄错了!!!!怎么修改点评信息啊????  发表于 2013-3-11 20:09
第二个问题,是有代码,没有说明,猛一看,还真没看出区别! 仔细研究,才发现多了一对括号! 没加过好是把一个boolean型的值加上字符!  发表于 2013-3-11 20:07

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
        public static void main(String[] args) {
                final String pig = "length:10";
                final String dog = "length:" + pig.length();
                System.out.println("pig="+pig+"   dog="+dog);//在这里打印pig和dog的值
                System.out.println("Animals are equals:"+(pig==dog));//这样应该把pig==dog加一个小括号,提升优先级
                System.out.println("Animals are equals:" + pig.equals(dog));
        }
打印的结果是:
pig=length:10   dog=length:9
Animals are equals:false
Animals are equals:false
你的三个疑问都解决了。

希望对你有所帮助,编程的时候细心一点。继续加油

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
  1. public class AnimalFarm {
  2.         public static void main(String[] args) {
  3.                 final String pig = "length:10";
  4.                 //System.out.println(pig.length());9
  5.                 final String dog = "length:"+pig.length();//dog = "length:9";
  6.                 //下面一句是这些样子看的先将("Animals are equals:"+ pig)的结果算出来在比较,==返回值只有false和true
  7.                 System.out.println(("Animals are equals:"+ pig)==dog);
  8.                 //这一句比较的是pig与dog是否是同一个对象,明显不是哦。
  9.                 System.out.println("Animals are equals:"+ pig.equals(dog));
  10.         }
  11. }
复制代码
回复 使用道具 举报
关于第二个问题:只输出了false,并没有输出"Animals are equals:"这个字符串,为什么会这样?
  1. System.out.println("Animals are equals: "+ (pig==dog));
复制代码
将pig==dog加上括号就能打印出前面的"Animals are equals: "。

话说为什么呢,我也比较疑惑。
回复 使用道具 举报
第一:你可以试着打印pig和dog的值,分别是length:10,length:9。所以第一行打印结果为false
第二:在你的System.out.println("Animals are equals:"+ pig==dog);这句话比较中,其实是比较的("Animals are equals:"+ pig)==dog吗?所以打印出来的只有false。而不能输出Animals are equals:false..当你(("Animals are equals:"+ pig==dog);中的(pig+dog)括号起来就可以输出该有的答案。
第三:比较的是pig和dog是不是同一个对象。不是。所以输出也是false



回复 使用道具 举报
郑元皓 发表于 2013-3-11 19:09
第一:你可以试着打印pig和dog的值,分别是length:10,length:9。所以第一行打印结果为false
第二:在你的S ...

你好,我想问下这个问题中dog  length:9。为什么是9?谢谢!
回复 使用道具 举报
彭波 中级黑马 2013-3-12 19:55:55
8#
施家雄 发表于 2013-3-12 19:09
你好,我想问下这个问题中dog  length:9。为什么是9?谢谢!

final String pig = "length:10";你数下双引号中不是有9个字符码,pig.length不就是求其长度的吗?
回复 使用道具 举报
彭波 发表于 2013-3-12 19:55
final String pig = "length:10";你数下双引号中不是有9个字符码,pig.length不就是求其长度的吗? ...

谢谢了,我知道了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马