En prenant par exemple ces extraits de code:Comment la variable this.method diffère-t-elle de object.method lors de la comparaison de deux objets avec l'interface Comparable?
public int compareTo(DSA_Student C){
if (this.getName().compareTo(C.getName())<0) return -1;
else
if (this.getName().compareTo(C.getName())>0) return 1;
else return (new Integer(this.getStudentId()).compareTo(new Integer(C.getStudentId())));
}
Dans la classe principale:
SortedSet <DSA_Student> S1=new TreeSet<DSA_Student>();
DSA_Student a=new DSA_Student("A",10);
DSA_Student b=new DSA_Student("F",40);
DSA_Student c=new DSA_Student("B",49);
DSA_Student d=new DSA_Student("E",45);
DSA_Student e=new DSA_Student("D",30);
DSA_Student f=new DSA_Student("C",45);
DSA_Student g=new DSA_Student("B",45);
S1.add(a);
S1.add(b);
S1.add(c);
S1.add(d);
S1.add(e);
S1.add(f);
S1.add(g);
Je veux savoir ce que font référence à et comment this.getName() et C.getName() fait le compilateur sait qu'ils sont deux objets différents et font ainsi la comparaison?
Le compilateur ** ne sait pas ** qu'ils se réfèrent à deux objets différents, mais qu'ils se réfèrent à l'objet 'this' et à tout objet référencé par le paramètre C (mal nommé). Ils pourraient en fait être un seul et même objet, ou C peut en fait être une référence nulle. –
'this' est l'instance sur laquelle' compareTo' est appelée; 'C' est le paramètre qui a été passé. Par exemple, dans 'a.compareTo (b)' 'this' est' a', 'C' est' b'. –
Note: 'compareTo' n'est pas appelé du tout, parce que vous passez un' Comparator', sauf si 'Comparator' arrive à appeler' compareTo'. –