Вопрос

Я кодировал в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top