黑马程序员技术交流社区

标题: this对象 [打印本页]

作者: 朱冰18189949658    时间: 2014-8-20 22:09
标题: this对象
下面为什么相等??
  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 }
复制代码

相等,是同一人!
作者: 廿乙木    时间: 2014-8-20 22:30
不是名字和年龄都相同吗
作者: 朱冰18189949658    时间: 2014-8-20 22:35
廿乙木 发表于 2014-8-20 22:30
不是名字和年龄都相同吗

值相同,但是2个对象的内存地址不是不同吗???
作者: 0小菜鸟0    时间: 2014-8-20 22:47
错,不是同一个人。你new 了两次,等于创建了两个实例对象,开辟了两个空间,在现实社会中也有同名同年龄的人
作者: 廿乙木    时间: 2014-8-20 22:55
字符串中的那个方法,不是被复写了吗,比较的就是内容,又不是地址
作者: 谢建平    时间: 2014-8-21 08:20
判断是不是相等     又不是固定的    java 墨认判断相等地址一样,但是你也可以自己设定判断标准
作者: cs8630323    时间: 2014-8-21 14:12
抓狂,都符合compare方法判断条件当然true啦,你又没有判断地址值又没有相同
作者: 朱冰18189949658    时间: 2014-8-21 19:18
0小菜鸟0 发表于 2014-8-20 22:47
错,不是同一个人。你new 了两次,等于创建了两个实例对象,开辟了两个空间,在现实社会中也有同名同年龄的 ...

书上写的是相等,我没有运行,不知道是不是有可能书上写错了
作者: 朱冰18189949658    时间: 2014-8-21 19:20
廿乙木 发表于 2014-8-20 22:55
字符串中的那个方法,不是被复写了吗,比较的就是内容,又不是地址

this.age==p.age这个比较的不是地址吗?前面name比较的是内容,
作者: 陶圣虎    时间: 2014-8-21 21:06
朱冰18189949658 发表于 2014-8-21 19:20
this.age==p.age这个比较的不是地址吗?前面name比较的是内容,

age 是int类型,int类型也有自己的比较方法啊
作者: 回头浪子心    时间: 2014-8-21 21:11
表示默默的路过~~~~:lol
作者: 朱冰18189949658    时间: 2014-8-21 22:54
kakasa 发表于 2014-8-21 22:35
哪里比较地址了?

this.age==p.age
不是比较对象p1和对象p2的地址吗???
作者: 0小菜鸟0    时间: 2014-8-21 23:01
朱冰18189949658 发表于 2014-8-21 19:20
this.age==p.age这个比较的不是地址吗?前面name比较的是内容,

基本类型比较的是值,引用类型比较的是地址,你说了是地址是值啊
作者: 怀念黑海岸    时间: 2014-8-22 20:45
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就是比较他们的值。基本数据类型只需要通过=号来比较值就行了。
作者: 朱冰18189949658    时间: 2014-8-22 22:28
陶圣虎 发表于 2014-8-21 21:06
age 是int类型,int类型也有自己的比较方法啊

貌似明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2