在观看thenewboston的基础Java教程时,他教我们要像这样写if语句。(请注意大括号)
if("pie"== "pie"){
System.out.println("Hurrah!");
}
所以我尝试去掉大括号
if("pie"== "pie")
System.out.println("Hurrah!");
它仍然有效!由于我是Java的新手,我不知道为什么会有效。我想知道删除(或添加)花括号是否会有任何好处/坏处。
在观看thenewboston的基础Java教程时,他教我们要像这样写if语句。(请注意大括号)
if("pie"== "pie"){
System.out.println("Hurrah!");
}
所以我尝试去掉大括号
if("pie"== "pie")
System.out.println("Hurrah!");
它仍然有效!由于我是Java的新手,我不知道为什么会有效。我想知道删除(或添加)花括号是否会有任何好处/坏处。
对于一个单独的语句,它将保持不变,但是如果您想在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
}
}
(以上链接中的示例)
if
、while
、for
等都只期望单个语句;如果你只需要保护一个语句,那么就不需要花括号。if (x > 20)
x -= 7;
y -= 8;
上述声明是误导性的:缩进让您相信两个分配都受到保护,而实际上只有第一个受到保护。原因是Java中的空格不重要:缩进语句不会改变程序整体流程中的位置。像上面这样的错误很难发现,因此采用规则以在第一时间防止它们是一个好主意。
正如@rajesh所说,当主体只有一个语句时,括号是可选的。
话虽如此,即使在单个语句的情况下也建议保留括号,因为一些编码风格建议这样做,这样您(或之后的程序员)更不可能在以后更改代码时出错。
if("pie"== "pie")
System.out.println("Hurrah!");
System.out.println("Tricked you");
它确实有一个缺点。目前提到的答案是正确的。但是从安全角度来看,它存在一些缺点。作为一个支付团队的成员,安全是一个更强大的因素,促使这样的决策。假设你有以下代码:
if( "Prod".equals(stage) )
callBankFunction ( creditCardInput )
else
callMockBankFunction ( creditCardInput )
现在假设您的代码由于某些内部问题而无法正常工作。您想要检查输入内容。因此,您进行以下更改:
if( "Prod".equals(stage) )
callBankFunction ( creditCardInput )
else
callMockBankFunction ( creditCardInput )
Logger.log( creditCardInput )
假设你修复了问题并部署了这段代码(也许审阅者和你认为这不会引起问题,因为它不在“Prod”条件内)。神奇的是,你的生产日志现在打印出可以被所有能够看到日志的人员查看的客户信用卡信息。万一其中有人(带着恶意的)获取了这些数据,后果不堪设想。
因此,缺少括号和粗心编码往往会导致安全信息的泄露。这也被CERT-软件工程研究所,卡内基梅隆大学列为JAVA的漏洞。
花括号通常用于表示一组语句。如果没有花括号,只有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
对象,请使用 String
中的 .equals()
方法。这个例子仍然有效,因为它将一个常量字符串与自身进行比较,这总是为真。这是一种样式问题,适用于包括Java、C++、C和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);
if
后面只有一条语句,则花括号不是必需的。if
条件下,则需要使用花括号。循环
也适用。如果只有一句话,情况就相同。但如果有多个句子,你需要使用 { } 语法。
不过,真正的危险在于稍后编辑代码。像这样的内容进行编辑相对容易:
if (someCondition)
// do something
to
if (someCondition)
// do something
// do something else important
我认为只有当 someCondition 为真时,“执行其他重要操作”才会运行。缩进可能会误导 :-)
使用括号,这种危险就不存在了。
if("cherry".equals("cherry"))
if("pie".equals("pie"))
System.out.println("Hurrah!");
else
System.out.println("Rats!");
if("cherry".equals("cherry"))
if("pie".equals("pie"))
System.out.println("Hurrah!");
else
System.out.println("Rats!");
else 指向的 if 语句,但如果您选择像我经常那样规避规则,那么这是您应该注意的事项。
==
比较字符串;应始终使用.equals()
。 - Jesper