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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱冰18189949658 中级黑马   /  2014-8-20 22:09  /  2017 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面为什么相等??
  1. 01 class Person
  2. 02 {
  3. 03   String name ;
  4. 04   int age ;
  5. 05  Person(String name,int age)
  6. 06  {
  7. 07    this.name = name ;
  8. 08 this.age = age ;
  9. 09  }
  10. 10  boolean compare(Person p)
  11. 11  {
  12. 12   if(this.name.equals(p.name)&&this.age==p.age)
  13. 13   {
  14. 14  return true ;
  15. 15   }
  16. 16   else
  17. 17  {
  18. 18  return false ;
  19. 19   }
  20. 20  }
  21. 21 }
  22. 22
  23. 23 public class TestCompare
  24. 24 {
  25. 25   public static void main(String[] args)  
  26. 26 {
  27. 27   Person p1 = new Person("张三",30);
  28. 28   Person p2 = new Person("张三",30);
  29. 29  System.out.println(p1.compare(p2)?"相等,是同一人!":"不相等,不是同一人!");
  30. 30 }
  31. 31 }
复制代码

相等,是同一人!

16 个回复

倒序浏览
不是名字和年龄都相同吗
回复 使用道具 举报
廿乙木 发表于 2014-8-20 22:30
不是名字和年龄都相同吗

值相同,但是2个对象的内存地址不是不同吗???
回复 使用道具 举报
错,不是同一个人。你new 了两次,等于创建了两个实例对象,开辟了两个空间,在现实社会中也有同名同年龄的人
回复 使用道具 举报
字符串中的那个方法,不是被复写了吗,比较的就是内容,又不是地址
回复 使用道具 举报
判断是不是相等     又不是固定的    java 墨认判断相等地址一样,但是你也可以自己设定判断标准
回复 使用道具 举报
抓狂,都符合compare方法判断条件当然true啦,你又没有判断地址值又没有相同
回复 使用道具 举报
0小菜鸟0 发表于 2014-8-20 22:47
错,不是同一个人。你new 了两次,等于创建了两个实例对象,开辟了两个空间,在现实社会中也有同名同年龄的 ...

书上写的是相等,我没有运行,不知道是不是有可能书上写错了
回复 使用道具 举报
廿乙木 发表于 2014-8-20 22:55
字符串中的那个方法,不是被复写了吗,比较的就是内容,又不是地址

this.age==p.age这个比较的不是地址吗?前面name比较的是内容,
回复 使用道具 举报
朱冰18189949658 发表于 2014-8-21 19:20
this.age==p.age这个比较的不是地址吗?前面name比较的是内容,

age 是int类型,int类型也有自己的比较方法啊
回复 使用道具 举报
表示默默的路过~~~~:lol
回复 使用道具 举报
哪里比较地址了?
回复 使用道具 举报
kakasa 发表于 2014-8-21 22:35
哪里比较地址了?

this.age==p.age
不是比较对象p1和对象p2的地址吗???
回复 使用道具 举报
朱冰18189949658 发表于 2014-8-21 19:20
this.age==p.age这个比较的不是地址吗?前面name比较的是内容,

基本类型比较的是值,引用类型比较的是地址,你说了是地址是值啊
回复 使用道具 举报
比较的是对象 的值吧,引用数据类型的值是哈希值,基本数据类型比较的是值
我是这么理解的,论坛貌似有人发了关于equals和==的帖子,可以搜搜。
回复 使用道具 举报
boolean compare(Person p)
11  {
12   if(this.name.equals(p.name)&&this.age==p.age)
13   {
14  return true ;
15   }
16   else
17  {
18  return false ;
19   }
20  }
你这代码里面都说的很清楚了哦,对于非基本类型的变量name,你通过比较他们的值来确定是否相等,而对于基本数据类型age,你也是通过=来比较他们是否相等的。两个结果都相等,那么返回结果肯定就是true了啊。对于非基本类型的变量你用=号是比较他们的地址,但是你用equals就是比较他们的值。基本数据类型只需要通过=号来比较值就行了。
回复 使用道具 举报
陶圣虎 发表于 2014-8-21 21:06
age 是int类型,int类型也有自己的比较方法啊

貌似明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马