Это помогает? Они оба хороши для сравнительно небольших значений величин слева и справа. Но числа с большими величинами страдают от целочисленного переполнения.
int right = Integer.MAX_VALUE-100;
int left = Integer.MAX_VALUE-120;
int newLeft = left + (right-left)/2;
System.out.println(newLeft);
newLeft = (right + left)/2; // = -222/2 = -111
System.out.println(newLeft); // oops!
Отпечатки
2147483537
-111
И пока мы находимся в топи c, именно поэтому это плохая практика для реализации int
компаратор вроде этого:
Comparator<Integer> comp = (a, b) -> a - b;
Когда это должно быть так
Comparator<Integer> comp = (a, b) -> a > b ? 1 : a < b ? -1 : 0;