Page 1 of 1

About Question enthuware.ocpjp.v21.2.1724 :

Posted: Mon Jun 16, 2025 12:04 pm
by giginar
"the implementation of compareTo methods of String, Integer, and Double classes are not compatible with each other and they throw ClassCastException when an object of one class is compared with an object of another class." this sentence in the explanation and actually the answer of the question, I strongly advice to add why they are not comparable to each other also. For example, Integer and Double are also not comparable when used together. The code group below would throw the same exception, too.

Object[] sa = { 100.1, 100.0, 100 };
Collections.sort(Arrays.asList(sa), null);
System.out.println(sa[0]+" "+sa[1]+" "+sa[2] );

Why is that exactly?

Re: About Question enthuware.ocpjp.v21.2.1724 :

Posted: Mon Jun 16, 2025 9:41 pm
by admin
Because Integer's compareTo method tries to cast the argument to Integer. If you try to invoke the compareTo method on an Integer object and pass it a Double object, then casting it to Integer will cause a ClassCastException to be thrown. The same happens for other classes also.

Re: About Question enthuware.ocpjp.v21.2.1724 :

Posted: Tue Jul 15, 2025 10:15 pm
by Sophia2005
Could you please clarify if there’s any design reason why the compareTo methods in Integer and Double were not implemented to allow cross-type comparison, for example, Agario by using Number as a common interface?

Re: About Question enthuware.ocpjp.v21.2.1724 :

Posted: Wed Jul 16, 2025 12:15 am
by admin
We can only guess. Double values are inherently different from integral values (read about how floating point arithmetic and how they are stored). So it does not make much sense to blindly compare a double value with an integral value. If the programmer still wants to compare the two values, they should first convert the values to one or the other type themselves and then compare.