黑马程序员技术交流社区

标题: 此对象和指定对象的区别 [打印本页]

作者: 孙娜    时间: 2013-3-20 10:52
标题: 此对象和指定对象的区别
本帖最后由 孙娜 于 2013-3-20 12:29 编辑
  1. class Student implements Comparable
  2. {
  3.         private String name;
  4.         private int age;
  5.         Student(String name,int age)
  6.         {
  7.                 this.name=name;
  8.                 this.age=age;
  9.         }
  10.         public int compareTo(Object obj)
  11.         {
  12.                 if(!(obj instanceof Student))
  13.                         throw new RuntimeException("不是学生对象");
  14.                 Student s=(Student)obj;
  15.                 if(this.age>s.age)//此对象大于指定对象?????
  16.                 return 1;
  17.                 if(this.age==s.age)
  18.                 {
  19.                         return this.name.compareTo(s.name);
  20.                 }
  21.                 return -1;
  22.         }
  23.         public String getName()
  24.         {
  25.                 return name;
  26.         }
  27.         public int getAge()
  28.         {
  29.                 return age;
  30.         }
  31. }
复制代码
我总觉得this.age和s.age是一样的,为什么不一样?

作者: 江公亮    时间: 2013-3-20 11:02
不一样的,this,是指当前对象,也就是该类的对象,而s是指你传进来对象的引用。
作者: 郝强勇    时间: 2013-3-20 11:18
本帖最后由 郝强勇 于 2013-3-20 11:23 编辑

娜娜同学的问题,感觉都是怪怪的呢?两个对象的区别,两个对象不是同一个对象,有啥区别啊。要说有区别就是在调用过程中充当的角色不一样,this代表本类对象,因为在写类代码是时候还没有本类的实例对象,所以要用this代表,当创建了本类的实例对象时候,this就代表未来被创建的对象。指定对象呢?在你这个程序中public int compareTo(Object obj)方法中的obj就是指定对象了,也是代表未来即将传进来的对象参数,其实当存入TreeSet集合中时,会默认调用这个方法的,传递进来的参数就是集合中已经存在的对象了。this.age和s.age是不一样的,这样吧,给你举一个例子:你自己具有比较年龄的方法,当你进入黑马教室的时候(这个教室是按照年龄从前到后进行排座的),你会自觉的跟每一个人比一下,才能确定你自己坐在哪吧,那么你和别人比调用的就是你自己的compareTo方法,而在代码块中,this.age就是代表 孙娜.age,   s.age就是代表 张三.age。明白?我只能解释到这个程度了啊!!
作者: 郝勇    时间: 2013-3-20 11:21
郝强勇 发表于 2013-3-20 11:18
娜娜同学的问题,感觉都是怪怪的呢?两个对象的区别,两个对象不是同一个对象,有啥区别啊。要说有区别就是 ...

高手    理解真透彻!
作者: 郝强勇    时间: 2013-3-20 11:24
郝勇 发表于 2013-3-20 11:21
高手    理解真透彻!

过奖了,在这班门弄斧了,呵呵!咱俩这名字确实有点意思 啊!!
作者: 杨杨    时间: 2013-3-20 12:10
本帖最后由 杨杨 于 2013-3-20 12:13 编辑

如果写个main方法可能更有利于理解
  1. package cn.itheima.test;

  2. public class Main {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 Student stu1= new Student("张三", 18);
  8.                 Student stu2= new Student("李四", 20);
  9.                 System.out.println(stu1.compareTo(stu2));//写一个代码可能更容易理解 stu1 和sut2 是一个对象吗
  10.                 //如果你能分清哪个是this.age哪个是s.age 那样的话你自己就理解了
  11.                

  12.         }

  13. }
  14. 如果能把stu1和stu2和对应的this.age 和s.age 好就行了
复制代码

作者: 孙娜    时间: 2013-3-20 12:20
郝强勇 发表于 2013-3-20 11:18
娜娜同学的问题,感觉都是怪怪的呢?两个对象的区别,两个对象不是同一个对象,有啥区别啊。要说有区别就是 ...

呃...最近看视频总是犯晕。我明白了,谢谢
作者: 孙娜    时间: 2013-3-20 12:21
江公亮 发表于 2013-3-20 11:02
不一样的,this,是指当前对象,也就是该类的对象,而s是指你传进来对象的引用。 ...

其实就是这么简单,不知道怎么就迷糊了。谢谢
作者: 江公亮    时间: 2013-3-20 12:23
孙娜 发表于 2013-3-20 12:21
其实就是这么简单,不知道怎么就迷糊了。谢谢

:D,加油哦
作者: 孙娜    时间: 2013-3-20 12:29
杨杨 发表于 2013-3-20 12:10
如果写个main方法可能更有利于理解

嗯,开始时是代码没看全。理解了,谢谢
作者: 杨杨    时间: 2013-3-20 13:36
孙娜 发表于 2013-3-20 12:29
嗯,开始时是代码没看全。理解了,谢谢

我感觉您的水平也不可能那么才
作者: 郝勇    时间: 2013-3-20 13:42
郝强勇 发表于 2013-3-20 11:24
过奖了,在这班门弄斧了,呵呵!咱俩这名字确实有点意思 啊!!

呵呵   我堂弟叫郝强    你名字都把我俩 占全了!
作者: 郝强勇    时间: 2013-3-20 13:43
郝勇 发表于 2013-3-20 13:42
呵呵   我堂弟叫郝强    你名字都把我俩 占全了!

:o真的啊,这个巧劲儿的啊!呵呵,幸会!




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