Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Для логических значений они означают одно и то же - хотя для XOR есть составной оператор присваивания:
x ^= y;
Нет эквивалентного составного оператора присваивания для неравенства.
Что касается того, почему они оба доступны - было бы странно, если бы XOR не был доступен только потому, что он работает так же, как неравенство. Это должно быть логически, так оно и есть. Для не-булевых типов результат отличается, потому что это другой тип результата, но это не значит, что имеет смысл удалить XOR для boolean
.
Да, вы можете использовать XOR для проверки логических значений на (не) равенство, хотя код менее интуитивно понятен: if (x ^ y)
против if (x != y)
.
С логическими значениями не должно быть никакой разницы. Вы должны выбрать тот, который больше подходит для вашего чувства работы.
Пример:
bool oldChoice = ...;
bool newChoice = ...;
if (oldChoice != newChoice)
...
Здесь XOR
даст тот же результат, но не будет отражать реальное намерение кода.
Они должны быть практически одинаковыми в этом случае.