Почему мы обычно используем `||`, а не `|`, в чем разница? - PullRequest
207 голосов
/ 18 августа 2011

Мне просто интересно, почему мы обычно используем логическое ИЛИ || между двумя логическими значениями, а не побитовым ИЛИ |, хотя они оба работают хорошо.*

if(true  | true)  // pass
if(true  | false) // pass
if(false | true)  // pass
if(false | false) // no pass
if(true  || true)  // pass
if(true  || false) // pass
if(false || true)  // pass
if(false || false) // no pass

Можем ли мы использовать | вместо ||?То же самое с & и &&.

Ответы [ 27 ]

0 голосов
/ 05 сентября 2014

Есть много вариантов использования, предлагающих, почему вы должны пойти на ||, а не |.В некоторых случаях приходится использовать оператор | для проверки всех условий.

Например, если вы хотите проверить проверку формы и хотите показать пользователю всенедопустимые поля с текстами ошибок, а не просто первое недопустимое поле. Оператор

|| будет

   if(checkIfEmpty(nameField) || checkIfEmpty(phoneField) || checkIfEmpty(emailField)) {
      // invalid form with one or more empty fields
   }

   private boolean checkIfEmpty(Widget field) {
      if(field.isEmpty()) {
        field.setErrorMessage("Should not be empty!");
        return true;
      }
      return false;
   }

То же самое с фрагментом выше, если пользователь отправляет форму с ALLпустые поля, ТОЛЬКО nameField будет отображаться с сообщением об ошибке.Но, если вы измените его на

   if(checkIfEmpty(nameField) | checkIfEmpty(phoneField) | checkIfEmpty(emailField)) {
      // invalid form with one or more empty fields
   }

, оно будет отображать правильное сообщение об ошибке в каждом поле независимо от условий true.

0 голосов
/ 27 июня 2012

обычно я использую, когда есть прединкрементный и постинкрементный оператор. Посмотрите на следующий код:

package ocjpPractice;
/**
 * @author tithik
 *
 */
public class Ex1 {

    public static void main(String[] args) {
    int i=10;
    int j=9;
    int x=10;
    int y=9;
    if(i==10 | ++i>j){
        System.out.println("it will print in first if");  
        System.out.println("i is: "+i);
    }

    if(x==10 ||++x>y){
        System.out.println("it will print in second if");   
        System.out.println("x is: "+x);
    }
    }
}

выход:

будет напечатано первым, если
я: 11

он будет напечатан в секунду, если
х: 10

оба if блока одинаковы, но результат отличается. когда есть |, оба условия будут оценены. Но если это ||, оно не будет оценивать второе условие, поскольку первое условие уже выполнено.

0 голосов
/ 19 сентября 2008

||логично или и |немного или.

0 голосов
/ 19 сентября 2008

Операторы Java

|побитовый или, ||логично или.

0 голосов
/ 19 сентября 2008

Взгляните на:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html

|поразрядно включается ИЛИ

||логично ИЛИ

0 голосов
/ 19 сентября 2008

| является побитовым оператором. || является логическим оператором.

Один займет два бита и / или их.

Кто-то определит истину (это ИЛИ это). Если это правда или это правда, тогда ответ верен.

О, и черт побери, люди быстро отвечают на эти вопросы.

0 голосов
/ 19 сентября 2008

|= побитовый или, ||= логика или

...