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。为什么?
final String dog = "length:"+pig.length();//dog = "length:9";
//下面一句是这些样子看的先将("Animals are equals:"+ pig)的结果算出来在比较,==返回值只有false和true
System.out.println(("Animals are equals:"+ pig)==dog);
//这一句比较的是pig与dog是否是同一个对象,明显不是哦。
System.out.println("Animals are equals:"+ pig.equals(dog));
}
}
复制代码
作者: 徐鸿燕 时间: 2013-3-11 19:08
关于第二个问题:只输出了false,并没有输出"Animals are equals:"这个字符串,为什么会这样?
System.out.println("Animals are equals: "+ (pig==dog));
复制代码
将pig==dog加上括号就能打印出前面的"Animals are equals: "。
话说为什么呢,我也比较疑惑。作者: 郑元皓 时间: 2013-3-11 19:09
第一:你可以试着打印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