Я лично предпочитаю выражение "boolean1 ^ boolean2" из-за его краткости.
Если бы я был в вашей ситуации (работая в команде), я бы пошел на компромисс, заключив логику «boolean1 ^ boolean2» в функцию с описательным именем, например «isDifferent (boolean1, boolean2)».
Например, вместо использования «boolean1 ^ boolean2», вы бы назвали «isDifferent (boolean1, boolean2)» примерно так:
if (isDifferent(boolean1, boolean2))
{
//do it
}
Ваша функция isDifferent (boolean1, boolean2) будет выглядеть так:
private boolean isDifferent(boolean1, boolean2)
{
return boolean1 ^ boolean2;
}
Конечно, это решение влечет за собой использование якобы постороннего вызова функции, который сам по себе подлежит проверке Best Practices, но он избегает многословного (и безобразного) выражения "(boolean1 &&! Boolean2) || (boolean2 && ! boolean1) "!