这个名为Bool Bool=object.method()的语法是什么;Java中的0

这个名为Bool Bool=object.method()的语法是什么;Java中的0,java,conditional,boolean,Java,Conditional,Boolean,我刚刚在我的室友代码中看到了这行代码 Bool bool = method() > 0; 或 这将导致nameIsTony变为true 所以你可以有一个内联条件语句 这叫什么 Bool bool = method() > 0; 将表达式method()>0(布尔值)的结果分配给变量bool 当然,有时候这可能有点难理解——我更喜欢在这种情况下使用括号,比如 Bool bool = (method() > 0); 我想“内联逻辑表达式”是一个合适的名称。name==“Ton

我刚刚在我的室友代码中看到了这行代码

Bool bool = method() > 0;

这将导致
nameIsTony
变为
true

所以你可以有一个内联条件语句

这叫什么

Bool bool = method() > 0;
将表达式
method()>0
(布尔值)的结果分配给变量
bool

当然,有时候这可能有点难理解——我更喜欢在这种情况下使用括号,比如

Bool bool = (method() > 0);
我想“内联逻辑表达式”是一个合适的名称。

name==“Tony”
(或者更确切地说,应该是
name.equals(“Tony”)
)是一个布尔表达式,所以我猜布尔表达式是最接近您所寻找的术语

它是一个表达式而不是一个语句-它的计算结果是某件事,而不是做某件事。它不是真正有条件的,因为它总是计算为布尔值——它的行为中没有条件,只有结果。所以我选择“布尔表达式”。“内联”并不是真的需要。

它被称为“赋值”。

它的全部内容

相等(=)的优先级高于赋值(=)

所以
boolean nameIsTony=name==“Tony”

  • first name==“Tony”表达式计算为true

  • 而不是分配给nameIsTony


  • 除了少数例外,表达式可以嵌套在其他表达式中。因此,每个都是布尔表达式:

    true
    false
    x > 0
    (x >= 0) && (x <= 5)
    100 == 100
    Integer.parseInt("100") == 100
    true & (true) & ((true)) & (((true)))
    

    看看语法 考虑Java语言规范的以下摘录:

    局部变量声明语句声明一个或多个局部变量名称

    LocalVariableDeclarationStatement:
            LocalVariableDeclaration ;
    
    LocalVariableDeclaration:
            VariableModifiers Type VariableDeclarators
            
    VariableDeclarators:
            VariableDeclarator
            VariableDeclarators , VariableDeclarator
    
    VariableDeclarator:
            VariableDeclaratorId
            VariableDeclaratorId = VariableInitializer
    
    VariableDeclaratorId:
            Identifier
            VariableDeclaratorId [ ]
    
    VariableInitializer:
            Expression
            ArrayInitializer
    
    这里我们看到局部变量声明语句允许对每个标识符进行可选的初始化。每个
    变量初始值设定项
    在语法上要么是
    表达式
    要么是
    数组初始化器

    因此,a
    sometypeanidentifier=sometexpression只是一个带有初始值设定项的局部变量语句
    someExpression
    在语法上可以是任何表达式


    关于
    ArrayInitializer

    ArrayInitializer
    类似于
    {1,2,3}
    {4,5,6}
    。请注意,
    ArrayInitializer
    语法规则不是
    表达式的一部分。这就是为什么你可以这样做,比如说,
    int[]x={1,2,3}x={4,5,6}在赋值中。

    为了使此类赋值更简单、更清晰,包括Java在内的许多语言都提供了三元运算符(?:),其用法如下:

    x = y = z; // use judiciously!
    
    Employee emp = "manager".equals(profile) ? new Manager() : new Engineer();
    
    所以,如果profile等于“manager”,那么Employee emp将设置为new manager(),否则将设置为new Engineer()


    还请注意,我写的是“manager.equals(profile)”而不是profile.equals(“manager”),原因是,尽管两者都是正确的,但使用第一种方法是更好的做法,因为在第二种方法中,如果profile为null,您将得到一个NPE(null指针异常)(除非并且直到您真的想要报告一个NPE异常,事实上,即使在这种情况下,更好的方法是添加对profile not等于null的检查).

    顺便说一句:
    Bool
    在Java中不是标准类型。你可能是指
    boolean
    。谢谢,是的,我知道这对Java不正确,只是想快速理解这一点。我发现这实际上与处理许多其他类型的组合表达式一样,只是看起来它比事实上是这样!那么什么是非内联布尔表达式呢?我的意思是,我会说它只是一个表达式。如果我们看一下整个语句,那么它就是一个带有初始值设定项的变量声明。我不喜欢这种类型的表达式太过冗长。例如,
    If(isAvailable==true)doSomething();
    。我认为
    布尔b=“Tony”.equals(name);
    很好。@Vivart+1用于好的捕获!!!我真正的意思是针对这样的场景:
    Number obj=((x%2)==0)?new EvenNumber():new OddNumber()
    我知道您在这里试图回答这个表达式是如何计算的,但同样重要的是要提到比较两个对象(或字符串对象与字符串文字的特殊方式,如本例所示)这可能是危险的,因为这将比较它们所引用的地址的值,而不是它们所引用的地址所持有的值;
    LocalVariableDeclarationStatement:
            LocalVariableDeclaration ;
    
    LocalVariableDeclaration:
            VariableModifiers Type VariableDeclarators
            
    VariableDeclarators:
            VariableDeclarator
            VariableDeclarators , VariableDeclarator
    
    VariableDeclarator:
            VariableDeclaratorId
            VariableDeclaratorId = VariableInitializer
    
    VariableDeclaratorId:
            Identifier
            VariableDeclaratorId [ ]
    
    VariableInitializer:
            Expression
            ArrayInitializer
    
    Employee emp = "manager".equals(profile) ? new Manager() : new Engineer();