关于java:Boolean和== vs =

Boolean and == vs =

语言是Java。
鉴于这种:

1
2
3
4
5
6
7
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是等效测试,它将给出结果:true或false。 但是,对于b1 = true,据我所知是一个声明,它在这种情况下不应该返回任何内容:b1 = true返回true,与== test完全相同?

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


if (identifier = literal)计算为:

1
2
identifier = literal;  
if (identifier)

首先,您将文字分配给标识符。然后您在分配后对其进行测试


很好,它们都返回true的原因仅仅是因为两个表达式都为true。

b1 = true是一个赋值->您告诉java b1是true,并且当它求值时它变为true,因为在这里您只是说b1是true。

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

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

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


当你写

1
b1 = true;

true被分配给b1。

当你写

1
if(b1 = true)

首先完成分配,然后对表达式求值,并且表达式求值为b1的值,即true