3

语言是Java。鉴于这种:

public static void main(String[] args) {
    Boolean b1 = true;
    Boolean b2 = true;
    int i1 = 1;

    if (b1 = true) //line 5
    if (b1 == true}  // line 6

我知道这b1 == true是一个等效的测试,它会给出结果:真或假。但是,b1 = true在我的理解中,with 是一个声明,除了在这种情况下,它应该什么都不返回:返回 true,与testb1 = true完全相同?==

你能解释一下为什么吗?谢谢!

4

3 回答 3

15

if (identifier = literal)评估为:

identifier = literal;  
if (identifier)

首先,您将文字分配给标识符。然后你在分配后测试它

于 2012-09-13T04:01:31.250 回答
1

当你写

b1 = true;

true分配给 b1。

当你写

if(b1 = true)

首先完成分配,然后计算表达式,表达式计算为b1ie的值true

于 2012-09-13T04:48:07.903 回答
1

好吧,两者都返回 true 的原因仅仅是因为两个表达式都是 true。

b1 = true 是一个赋值 --> 你告诉 java b1 是真的,当它评估时它变成了真的,因为这里你只是说 b1 是真的。

b1 == true 是一个条件 --> 这行有意义,因为您现在正在检查 [value of] b1 是否等于 true,这将根据 b1 是否为 true 评估为 true 或 false。请注意,您可以只写 b1 因为它已经是一个布尔值(真或假)。

我认为您没有意识到这一点,但您使用的是对象类型布尔而不是原始类型布尔。如果你真的不知道 Java 中基于对象的类型和原始类型之间的区别,你应该坚持使用小写 b 的那个。

顺便说一句,我不知道 Java 允许将赋值用作表达式。

于 2013-10-13T05:14:25.373 回答