|| (или) Логический оператор в Java VS .NET [Закрыто
-
29-09-2019 - |
Вопрос
Я кодировал в Java (в основном) и .NET на некоторое время.
Что я нашел, это то, что ||
логический оператор в .NET отличается в результате к ||
Оператор в Java.
Давайте посмотрим на следующий код Java:
Object obj = null;
if(obj == null || obj.toString().isEmpty()){
System.out.println("Object is null");
}
Результат кода выше будет:
Объект ноль
Причина того, что это потому, что obj == null
является true
И второе выражение не было оценено. Если бы это было, я бы получил java.lang.NullPointerException
.
И если я использовал один или (|
) Я бы тоже получил NullPointerException
(Оба оцениваются).
Мой вопрос следующий:
Если код был C #, я всегда буду получать objectReferenceNotset и т. Д. Исключение, поскольку значение OBJ - это значение NULL, а второе выражение всегда оценивается (независимо от оператора), что означает, что результат отличается в C #, чем в Java. Если я бы изменил код C # для правильной работы, я должен создать два оператора.
Есть ли не более простой способ сделать это в C #, чтобы быть похожим на Java? (Держите его в один, если с 2 выражениями)
Спасибо.
Решение
То ||
Оператор в C # - это короткое замыкание, как в Java. Как есть &&
. Отказ То |
и &
Операторы нет Короткое замыкание, как в Java.
Если ваши результаты разные, в коде есть ошибка. Можете ли вы показать нам оскорбление C # пожалуйста?
Это работает нормально:
object obj = null;
if(obj == null || string.IsNullOrEmpty(obj.ToString())) {
Console.WriteLine("Object is null");
}
Другие советы
|| Оператор имеет точно такое же значение в Java и C #. Это называется Условный логический или, или «Логические» короткие замыкания «логические или Оператор:
http://msdn.microsoft.com/en-us/library/6373H346%28vs.71%29.aspx.
Это поведение является строгим Особенность языка Java:
Во время выполнения левый операнд выражение операнда оценивается первым; [...] Если результирующее значение верно, значение условного или выражения является верным, а правовое выражение операнда не оценивается. Если значение левого операнда неверно, то правое выражение оценивается; [...] Полученное значение становится значением условного или выражения.
Таким образом, || вычисляет тот же результат, что и | на логических или логических операндах. Он отличается только тем, что правопреемное выражение операнда оценивается условно, а не всегда
Аналогичные правила определены для Java Coundal - и оператор.
Сравнить (идентично) к C #:
То
&&
и||
Операторы называются условными логическими операторами. Они также называют логическими операторами «короткие замыкания».Условный и выражение:
- включенный-или выражение
- Условное и выражение && включено-или выражение
Условное или выражение:
- Условный и выражение
- Условное или выражение || Условный и выражение
То
&&
и||
Операторы условные версии&
и|
Операторы:
- Операция
x && y
соответствует операцииx & y
, Кроме этогоy
оценивается только еслиx
не являетсяfalse
.- Операция
x || y
соответствует операцииx | y
, Кроме этогоy
оценивается только еслиx
не правда.
Это называется «Оценка короткого замыкания». Нет необходимости оценивать следующее утверждение. Это хорошая особенность в Java.