42 java if-statement curly-braces
在观看基本java的newbostons教程时,他教我们做if if这样的语句.(注意花括号)
if("pie"== "pie"){
System.out.println("Hurrah!");
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试去除花括号
if("pie"== "pie")
System.out.println("Hurrah!");
Run Code Online (Sandbox Code Playgroud)
它仍然有效!由于我是java的新手,我不知道为什么会这样.我想知道删除(或添加)花括号是否有任何好处/缺点.
Hab*_*bib 37
对于单个语句,它将保持不变,但如果要在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
Run Code Online (Sandbox Code Playgroud)
您应该看到: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
}
}
Run Code Online (Sandbox Code Playgroud)
(例子来自上面的链接)
不,绝对没有区别:一对花括号将多个语句组合成一个语句;if,while,for,等想到一条语句; 如果只需要保护一个语句,则不需要大括号。
但是,许多软件商店甚至坚持要求只用括号即可。原因是这样的错误:
if (x > 20)
x -= 7;
y -= 8;
Run Code Online (Sandbox Code Playgroud)
上面的陈述是令人误解的:缩进使您相信这两个分配都受到保护,而实际上只有第一个是受保护的。这样做的原因是Java中的空格不重要:缩进一条语句不会改变其在程序整体流程中的位置。上面的错误很难发现,因此采用规则来防止它们是一个好主意。
正如@rajesh所说,当主体是单个陈述时,大括号是可选的.
话虽如此,一些编码样式建议使用大括号,因为您(或跟随您的程序员)在您稍后更改代码时不太可能出错.
if("pie"== "pie")
System.out.println("Hurrah!");
System.out.println("Tricked you");
Run Code Online (Sandbox Code Playgroud)
第二个印刷品,Tricked you实际上并不在其中if,因为缩进而只是看起来像.
然而,这只是一个风格点,不是普遍接受的,当然一个称职的程序员需要能够阅读这两种形式.
小智 5
它确实有一个缺点。到目前为止提到的答案都是正确的。但从安全角度来看,它也存在一些缺点。由于在支付团队工作过,安全性是促使此类决策的一个更重要的因素。假设您有以下代码:
if( "Prod".equals(stage) )
callBankFunction ( creditCardInput )
else
callMockBankFunction ( creditCardInput )
Run Code Online (Sandbox Code Playgroud)
现在假设您的代码由于某些内部问题而无法工作。您想检查输入。因此,您进行以下更改:
if( "Prod".equals(stage) )
callBankFunction ( creditCardInput )
else
callMockBankFunction ( creditCardInput )
Logger.log( creditCardInput )
Run Code Online (Sandbox Code Playgroud)
假设您修复了问题并部署了此代码(也许审阅者&您认为这不会导致问题,因为它不在“Prod”条件内)。神奇的是,您的生产日志现在可以打印客户信用卡信息,所有可以查看日志的人员都可以看到这些信息。上帝保佑他们中的任何一个(怀着恶意)获得这些数据。
因此,不加括号和稍不小心的编码通常会导致安全信息的泄露。它还被CMU 软件工程研究所 CERT归类为 JAVA 漏洞。
| 归档时间: |
|
| 查看次数: |
32852 次 |
| 最近记录: |