为了账号安全,请及时绑定邮箱和手机立即绑定

谁能告诉我这里面的this代表什么?如果o是代表传入的学生对象,那么this又代表什么?

代码:

@Override

public int compareTo(student o) {

// TODO 自动生成的方法存根

return this.id.compareTo(o.id);

}


正在回答

2 回答

比如你有Student   A,Student B,两个对象,这样用:A.compareTo(B)。这里的compareTo就是上面写的方法,f方法里的this就是你调用方法的这个对象,也就是这的A,o是传入的对象,就是这的B。

0 回复 有任何疑惑可以回复我~
#1

福工刘德华 提问者

因为我要给student的泛型排序,collections.sort(studentList)报错,所以重写了这个compareTo方法,所以你所举例的学生A在这里我可以理解为指的是我所定义的那个student泛型的list(studentList)吗?
2017-11-06 回复 有任何疑惑可以回复我~
#2

慕粉3617928 回复 福工刘德华 提问者

这个sort排序也是要去进行两个对象的比较的,sort在这是根据compareTo对对象比较来排序的,所以需要你定义这个方法。这里collection里是对象,对象的比较是需要你去定义比较的方式的,也就是定义的compareTo,和equals类似。这里sort方法里是调用了compareTo方法去比较排序,至于你说的this是什么?他实际也是通过刚说的A、B这种形式来比较的,就是这里面的对象Student。 这个需要配合代码看更容易理解,实在不明白,先记下上面说的用法,至于collection.sort就是它方法里的具体实现了。
2017-11-06 回复 有任何疑惑可以回复我~

这里的this指的是调用该改写后的compareTo方法的对象,比如一个Student对象a,那么在对象a中调用compareTo方法就是a.compareTo(o),那么这个this指针指向的就是a对象,那么这个a.compareTo(o)的作用就是返回a.id与o.id的比较值,也就是在这里再调用a的属性id中的compareTo方法与o.id进行比较。从而实现根据学生id来对学生进行排序。重写这个方法主要是因为用sort方法对集合元素进行排序的时候,sort方法是通过对集合里的元素两两之间调用compareTo方法来排序的。

0 回复 有任何疑惑可以回复我~
#1

福工刘德华 提问者

因为我要给student的泛型排序,collections.sort(student)报错,所以重写了这个compareTo方法,所以你所说的那个调用当前compareto的对象指的是collections类吗?还是说这个this指的的是构造方法里的student,但是构造方法里的我是写string id;并没有赋初值又怎么和传进来的student o比较呢?
2017-11-06 回复 有任何疑惑可以回复我~
#2

福工刘德华 提问者

是collections.sort(studentlist)
2017-11-06 回复 有任何疑惑可以回复我~
#3

_Devil___4213279 回复 福工刘德华 提问者

调用当前方法的对象指的是Student类,它要实现了Comparable接口,才能使用collections类中的静态方法sort。 你改写Comparable接口中的的compareTo方法,使它能够通过比较学生id来进行排序。至于声明了id对象却没有赋值,我认为这个时候是没有办法调用id属性的compareTo 方法进行比较的。可以用Eclipse跑一跑,看看会不会抛出异常。
2017-11-06 回复 有任何疑惑可以回复我~
#4

福工刘德华 提问者 回复 _Devil___4213279

可是我认为this(即student).id的id没有任何初值,如何compareto(o.id即传进来的学生对象)
2017-11-06 回复 有任何疑惑可以回复我~
#5

_Devil___4213279 回复 福工刘德华 提问者

在这个问题上我也是和你一样的想法法的呀,id为null,就不能调用其compareto方法。
2017-11-07 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

谁能告诉我这里面的this代表什么?如果o是代表传入的学生对象,那么this又代表什么?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信