2015-11-11 245 views
-2

我想知道这个代码是什么样子就像三元运算符三元运算符。真正为空

if (a) { 
    // pass 
} else { 
    b(); 
} 

我们没有得到(东西)的代码有一些代码B执行时,是真实的,但万一是假的( )然后执行。

所以我们写:

a ? : b(); 

但我不知道这是正确的,当你让真正的代码空,或者,如果你要的东西取代它。其实我从来不使用三元运算符,但我们被要求这样做。

+0

http://stackoverflow.com/questions/9450864/java-ternary-with-no-return-for-method-calling –

回答

2

如果你已经试过这段代码,那么你会得到编译器错误,因为三元运算符期望表达式而不是语句。 true部分甚至没有表达式或语句。如果b()返回void,则false部分是一个语句,而不是表达式。如果b()返回一些东西,那么它可以被认为是一个表达式,它会没事的。

如果您有要执行的语句,并且不必选择表达式值,那么选择三元运算符上的if/else。你的第一个if/else语句可以简化为:

if (!a) 
{ 
    b(); 
} 
+0

@Downvoter请分享您怎么看这个答案可以改进。 – rgettman

+0

对我来说,你的描述没有多大意义,例如_和false部分是一个语句,而不是一个表达式 - 在'false'分支中调用一个方法 - 如果它没有返回'void',这是完全合法的。对我来说,你的描述听起来像是在三元运算符内调用方法是不允许的 - 这是不正确的。但也许我只是误解了... – tomse

+0

@tomse我已经假定它返回'void'因为没有被分配,但我已经澄清了我的答案。 – rgettman

7

这不是条件运算符是什么?它不是执行一个声明或另一个,这是评价一个表达或其他,和做出表达的结果。

你应该写你的代码为:

if (!a) { 
    b(); 
} 

其实我从来没有使用三元运算符,但我们被要求这样做。

如果你被要求为这种特殊情况这么做,那么我会非常警惕谁要求你这样做。我的猜测是,这实际上不是这种情况...

1

这是不可能的。从Oracle官方文档摘自:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25

条件运算符? :使用一个表达式 的布尔值来决定应评估哪两个其他表达式。

ConditionalExpression: 
    ConditionalOrExpression 
    ConditionalOrExpression ? Expression : ConditionalExpression 

的 “三元” 是 “由3个部分组成” 的定义。如果您只想对您的情况进行一次可能的评估,您只需使用if语句。

+0

downvote的任何原因? – Smittey