Различные типы сопоставимых объектов


При реализации интерфейса компаратора для достижения естественного упорядочения объектов:

Скажем, если бы у нас был счет класса:

class Account
{
   Account(String name, int id) 
   int balance() 
   void deposit(int n)
}

Мы хотели отсортировать остатки на двух счетах по порядку

В чем разница между этими двумя методами?

public class comparebalances implements Comparable <Account>
{

     public int compare (Account acc1, Account acc2)
     {
       return acc1.balance()-acc2.balance();
     }

}

public class comparebalances implements Comparable <Account>
{

     public int compare (Account acc1, Account acc2)
     {
         if (acc1.balance()> acc2.balance())
            return 1;
         else if (acc1.balance()< acc2.balance())
            return -1;
         else if (acc1.balance()==acc2.balance())
            return 0;
     }

}
2 3

2 ответа:

Второй вариант безопаснее, так как первый может давать неверные результаты для экстремальных значений (переполнение целых чисел).

Как уже писал Пьюс, второй безопаснее, когда переполнение целого числа даст вам неожиданный результат. Если вы хотите, чтобы он был коротким и безопасным одновременно, вы можете написать:

return Integer.compare(acc1.balance(), acc2.balance());