【问题标题】:Boolean and == vs =布尔值和 == vs =
【发布时间】:2012-09-13 03:58:21
【问题描述】:

语言是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 ,据我了解是一个声明,除了在这种情况下,它应该什么都不返回:b1 = true 返回 true,与 == 测试完全相同?

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

【问题讨论】:

  • b1 = true 是赋值而非声明。 Boolean b1; 是一个声明。
  • 你确定是编译错误吗?因为这些东西(未使用的变量)在 eclipse 中显示为 warnings

标签: java boolean


【解决方案1】:

if (identifier = literal) 计算结果为:

identifier = literal;  
if (identifier)

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

【讨论】:

  • 哇,现在我明白了,非常感谢!这就是编译器说“局部变量b1的值没有被使用”的原因。我正在读 SCJP 的书,但他们没有提到你给我的知识。是否属于比 SCJP 更高的级别?
  • @user1525788 其实我对Java也不是很了解,我主要使用C/C++,但是这条规则适用于大多数C系列语言。
【解决方案2】:

当你写作时

b1 = true;

true 分配给 b1。

当你写作时

if(b1 = true)

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      相关资源
      最近更新 更多