Подтвердить что ты не робот

Есть ли разница в удалении фигурных фигурных скобок из операторов If в java

Во время просмотра учебника thenewbostons по основному java, он учит нас делать, если такие утверждения (Обратите внимание на фигурные скобки)

if("pie"== "pie"){
    System.out.println("Hurrah!");
}

Итак, я попытался удалить фигурные скобки

if("pie"== "pie")
    System.out.println("Hurrah!");

И это все еще работает! Поскольку я новичок в java, я не знаю, почему это работает. И я хочу знать, удаляют ли (или добавляют) фигурные скобки какие-либо преимущества/недостатки.

4b9b3361

Ответ 1

Для одного оператора он останется таким же, но если вы хотите сгруппировать более одного оператора в блоке if, вы должны использовать исправления.

if("pie"== "pie"){
    System.out.println("Hurrah!");
    System.out.println("Hurrah!2");
}

if("pie"== "pie")
    System.out.println("Hurrah!"); //without braces only this statement will fall under if
    System.out.println("Hurrah!2"); //not this one

Вы должны увидеть: Блоки в Java

Блок представляет собой группу из нуля или более операторов между сбалансированными фигурными скобками и может использоваться везде, где разрешено одно утверждение. Следующие например, BlockDemo, иллюстрирует использование блоков:

class BlockDemo {
     public static void main(String[] args) {
          boolean condition = true;
          if (condition) { // begin block 1
               System.out.println("Condition is true.");
          } // end block one
          else { // begin block 2
               System.out.println("Condition is false.");
          } // end block 2
     }
}

(пример из приведенной выше ссылки)

Ответ 2

Нет, нет никакой разницы: пара фигурных скобок делает несколько операторов одной; if, while, for и т.д. ожидайте одну инструкцию; если вам нужно защищать только одно утверждение, вам не нужны скобки.

Однако многие магазины программного обеспечения настаивают на наличии брекетов даже для одного оператора. Причина заключается в таких ошибках:

if (x > 20)
    x -= 7;
    y -= 8;

Вышеприведенные утверждения вводят в заблуждение: отступы заставляют вас думать, что оба назначения защищены, а на самом деле только первый. Причина этого в том, что пробел в Java незначителен: отступы от оператора не меняют места размещения в общем потоке программы. Ошибок, подобных приведенным выше, очень сложно найти, поэтому принять правило, чтобы предотвратить их в первую очередь, является хорошей идеей.

Ответ 3

Как говорит @rajesh, фигурные скобки необязательны, когда тело является одним выражением.

Сказав, что оставляя фигурные скобки даже для случаев с одним выражением, рекомендуется использовать некоторые стили кодирования, потому что вы (или программист, который приходит после вас) с меньшей вероятностью ошибаются при изменении кода позже.

if("pie"== "pie")
    System.out.println("Hurrah!");
    System.out.println("Tricked you");

Вторая печать Tricked you на самом деле не находится в if, она просто выглядит из-за отступа.

Однако это только точка стиля, не общепринятая, и, конечно же, компетентный программист должен уметь читать обе формы.

Ответ 4

Если после if существует только один оператор, скобки не являются обязательными.

Теперь, если у вас есть блок кода, который должен находиться под условием if, тогда вам нужно использовать фигурные скобки.

Это справедливо и для loops, а также

Ответ 5

Нет, НО реальная опасность возникает, когда код впоследствии редактируется. Редактировать что-то вроде:

if (someCondition) 
    // do something 

к

if (someCondition) 
    // do something
    // do something else important

и подумайте, что "делать что-то еще важное" будет выполняться только тогда, когда someCondition истинно. Отступ вводит в заблуждение:-)

В скобках этой опасности нет.

Ответ 6

Это вопрос стиля, который применяется к нескольким языкам, включая Java, С++, C и С#.

Когда блок кода содержит только одну строку, фигурные скобки могут быть опущены. Это относится к любой структуре управления: if, while, for, do-while.

Например, две петли ниже эквивалентны.

for(int i=0; i<100; i++)
  doSomething(i);



for(int i=0; i<100; i++) {
  doSomething(i);
}

Преимущество опускания {}:Ваш код может быть более кратковременным - это означает меньше строки. Некоторые могут почувствовать, что это более читаемо.

Недостаток исключения {}:Если позднее вы измените свой код и вам нужно добавить еще одну строку в блок кода, вы можете не забывать добавлять эти {}. Если нет, и вы пишете код ниже:

for(int i=0; i<100; i++)
  doSomething(i);
  doSomethingElse(i);

Это действительно эквивалентно:

for(int i=0; i<100; i++) {
  doSomething(i);
}
doSomethingElse(i);

Ответ 7

В фигурных скобках обычно используется блок операторов. Без фигурных скобок в инструкции if() будет выполняться только первая строка. Не весь блок, начинающийся с { и заканчивающийся }

if("pie" == "pie") {
   System.out.println("Executes if pie==pie");
   System.out.println("So does this");
}

и

if("pie" == "pie")
   System.out.println("Executes if pie==pie");
System.out.println("Executes, regardless of if pie is equal to pie");

Обратите внимание, что если вы хотите сравнить два объекта String, используйте метод .equals() в String. Этот пример все еще работает, потому что он сравнивает одну константную строку с самим собой, что всегда верно.

Ответ 8

То же самое, если число предложений равно единице. Если их больше одного, вам нужен синтаксис {}

Ответ 9

И я хочу знать, могут ли удалять (или добавлять) фигурные скобки какие-либо преимущества/недостатки?

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

if("pie".equals("pie"))
    System.out.println("Hurrah!");

то, если вы хотите добавить дополнительную строку кода, вам нужно обязательно добавить фигурные скобки:

if("pie".equals("pie")) {
    log.debug("I am here!");
    System.out.println("Hurrah!");
}

Если они уже есть, просто поместите курсор в конец строки, нажмите return и начните добавлять новый код.

Для одной строки технически нет никакой разницы, но многие кодовые соглашения предлагают или даже дают мандат, чтобы они всегда были там. Существует даже правило CheckStyle для него.

Ответ 10

Для одного утверждения не проблема

if("pie"== "pie")
System.out.println("Hurrah!");

Для двух или более операторов после того, как вам нужны фигурные скобки

if("pie"== "pie"){
System.out.println("Hurrah!");
System.out.println("Hi!");
}

Также используйте .equals() для сравнения, а не ==.

Ответ 11

Нет, нет разницы между ними с одним утверждением в ответ на if. Если вы хотите добавить второй оператор в ответ на if, тогда требуются фигурные скобки.

Ответ 12

Он будет работать нормально, если после условия if есть только один оператор.

if("pie"== "pie")
    System.out.println("Hurrah!");
    System.out.println("second statement");// this will not print

но здесь оба оператора печатают

if("pie"== "pie")
{
System.out.println("Hurrah!");
System.out.println("second statement");
}

Я предлагаю вам использовать, как показано ниже, даже если вы хотите распечатать одиночный оператор.

if("pie".equals("pie"))
   {
       System.out.println("Hurrah!");
       System.out.println("second statement");
   }

Ответ 13

В фигурные скобки используются только в том случае, если вы хотите выполнить кучу кода в состоянии. Если вы не используете фигурные скобки, тогда он выполнит только первый оператор после условия. Остальные строки (ниже первого утверждения) не будут рассматриваться как часть if.

Ответ 14

У него есть недостаток. Ответы, упомянутые до сих пор, верны. Но есть некоторые недостатки с точки зрения безопасности вещей. Работа в платежной команде, безопасность - гораздо более сильный фактор, который мотивирует такие решения. Допустим, у вас есть следующий код:

if( "Prod".equals(stage) )
  callBankFunction ( creditCardInput )
else
  callMockBankFunction ( creditCardInput )

Теперь скажем, что этот код не работает из-за некоторой внутренней проблемы. Вы хотите проверить ввод. Поэтому вы делаете следующее изменение:

if( "Prod".equals(stage) )
  callBankFunction ( creditCardInput )
else
  callMockBankFunction ( creditCardInput )
  Logger.log( creditCardInput )

Предположим, вы исправите проблему и разворачиваете этот код (и, возможно, рецензент, и вы думаете, что это не вызовет проблемы, поскольку оно не находится в состоянии "Prod" ). Волшебно, ваши журналы производства теперь распечатывают информацию о кредитной карте клиента, которая видна всем сотрудникам, которые могут видеть журналы. Не дай бог, если кто-нибудь из них (со злым умыслом) завладеет этими данными.

Таким образом, отсутствие привязки и немного неосторожного кодирования часто может привести к нарушению защищенной информации. Он также классифицируется как уязвимость в JAVA CERT - Software Engineering Institure, CMU.

Ответ 15

Если вы добавляете фигурные скобки к этому оператору if:

if(++colorIndex == someColors.length)
            colorIndex = 0;
        setForeground(currentColor());
        repaint();

Тогда он больше не будет работать.

Поэтому я думаю, что в некоторых случаях это имеет значение.