我刚刚在室友代码中看到了这行代码。
Bool bool = method() > 0;
或
string name = "Tony";
boolean nameIsTony = name == "Tony";
这会导致nameIsTony
成为true
。
所以你可以有一个内联条件语句吗?
这叫什么?
答案 0 :(得分:6)
name == "Tony"
(或者更确切地说是name.equals("Tony")
)是一个布尔表达式,所以我猜测布尔表达式是与您要查找的内容最接近的术语。
这是一种表达而不是一种陈述 - 它评价某种东西,而不是做某事。它并不是真正有条件的,因为它总是评估一个布尔值 - 它的行为没有任何条件,只有它的结果。所以我会选择“布尔表达式”。 “内联”并不是必需的。
答案 1 :(得分:2)
相等(==)的优先级高于赋值(=)。
所以boolean nameIsTony = name == "Tony";
名字==“Tony”表达式评为真
并分配给nameIsTony。
答案 2 :(得分:1)
Bool bool = method() > 0;
将表达式method() > 0
的结果 - boolean
值 - 分配给变量bool
。
当然,有时候这可能有点难以阅读 - 我更喜欢在这种情况下使用括号,比如
Bool bool = (method() > 0);
我猜“内联逻辑表达式”是一个恰当的名称。
答案 3 :(得分:1)
只是为了使这样的任务更加简单和干净,包括Java在内的许多语言都提供了三元运算符(?:),它的使用方式如下:
Employee emp = "manager".equals(profile) ? new Manager() : new Engineer();
因此,如果profile等于“manager”,则Employee emp设置为new Manager(),否则设置为new Engineer()。
另请注意,我写了“经理”.equals(个人资料)而不是profile.equals(“经理”)的原因是即使他们两个都是正确的但使用第一种方式是更好的做法,因为在第二种方式你如果profile为null,则会得到一个NPE(空指针异常)(除非你真的想报告一个NPE异常,实际上,即使在那种情况下,beter方式也是添加对不等于null的profile的检查)。 p>
答案 4 :(得分:0)
这叫做“任务”。
答案 5 :(得分:0)
除了少数例外,表达式可以嵌套在其他表达式中。因此,每个都是布尔表达式:
true
false
x > 0
(x >= 0) && (x <= 5)
100 == 100
Integer.parseInt("100") == 100
true & (true) & ((true)) & (((true)))
关于地方变量声明,您可以使用任何表达式(只要它在语法和语义上都是正确的)。
所以在这样的事情上真的没什么特别的:
boolean b = (x >= 0) && (x <= 5); // nothing special
事实上,你也可以像这样嵌套作业:
x = y = z; // use judiciously!
请考虑以下Java语言规范摘录:
JLS 14.4 Local Variable Declaration Statements
局部变量声明语句声明一个或多个局部变量名称。
LocalVariableDeclarationStatement: LocalVariableDeclaration ; LocalVariableDeclaration: VariableModifiers Type VariableDeclarators VariableDeclarators: VariableDeclarator VariableDeclarators , VariableDeclarator VariableDeclarator: VariableDeclaratorId VariableDeclaratorId = VariableInitializer VariableDeclaratorId: Identifier VariableDeclaratorId [ ] VariableInitializer: Expression ArrayInitializer
这里我们看到局部变量声明语句允许为每个标识符进行可选的初始化。每个VariableInitializer
在语法上都是Expression
或ArrayInitializer
。
因此,此上下文中的someType anIdentifer = someExpression;
只是带有初始值设定项的局部变量语句。 someExpression
在语法上可以是任何表达。
ArrayInitializer
ArrayInitializer
类似于{ 1, 2, 3 }
和{ 4, 5, 6 }
。请注意,ArrayInitializer
语法规则不是Expression
制作的一部分。这就是为什么你可以在带有初始值设定项的声明中使用int[] x = { 1, 2, 3 };
,但不能在作业中使用x = { 4, 5, 6 };
。