布尔值和== vs =

Huy*_*han 3 java boolean

语言是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
Run Code Online (Sandbox Code Playgroud)

我理解这b1 == true是一个等效测试,它会给出结果:true或false.然而,b1 = true对于我的理解是一个声明,除了在这种情况下,它应该只返回:b1 = true返回true,与==test 完全相同?

你能解释一下原因吗?谢谢!

Pre*_*eti 15

if (identifier = literal) 评估为:

identifier = literal;  
if (identifier)
Run Code Online (Sandbox Code Playgroud)

首先将文字分配给标识符.然后你测试它分配后

  • 哇,现在我明白了,非常感谢你!这就是为什么编译器说*"不使用局部变量b1的值"*的原因.我正在读SCJP的书,但他们没有提到你给我的知识.这是否属于比SCJP更高的水平? (3认同)
  • @ user1525788实际上我甚至不熟悉Java,我主要使用C/C++,但这条规则适用于大多数C系列语言. (2认同)