使用=和==将布尔值与布尔变量进行比较有什么区别?

时间:2013-01-11 12:07:54

标签: c# java if-statement

让我们说如果有一个布尔变量状态。假设状态值为false。

我想知道

之间有什么区别
if ( status = true )
{
   //block of code
}

if ( status == true )
{
   //block of code
}

我试图通过编写一个示例程序来理解它,第一个if块中的代码被执行,无论值状态是什么(true或false)。

对于其他原始类型,如果我只使用一个“=”if和为什么它不会在布尔类型的情况下抛出错误,则系统会抛出编译时错误。感谢。

9 个答案:

答案 0 :(得分:21)

第一个不是比较,它是一个任务。它编译的原因是它分配了一个布尔值,因此赋值的结果也是一个布尔值。

第一个语句为status分配一个新值,并根据新值(if在您的情况下)执行true。第二个语句将status的当前值与右侧的值进行比较,并对比较结果起作用。

请注意,将Java中的boolean或C#中的booltruefalse进行比较绝不是一个好主意:您可以使用if (status)代替if (status == true)if (!status)代替if (status == false)。但是,这不适用于C#中的 nullable 类型,因此将bool?truefalse进行比较通常是个好主意。

答案 1 :(得分:10)

if ( status = true )将永远为真,因为您首先将true分配给status。另一方面,if ( status == true )只有在status为真时才会为真。

写它并避免拼写错误或混淆的最佳方式是:

if (status) { }

答案 2 :(得分:4)

在第一个代码部分,您正在分配而不是检查状态值! 为了避免这种错误,你可以这样写:

if (status)
if (!status)

(这仅适用于布尔值)

if ( true == status )

if ( "Peter" == name )

var和string / value的位置交换适用于所有变量类型, 一些程序员使用此功能来避免使用===

进行拼写错误

因为如果你不小心写了

if ( status = true )

而不是

if ( status == true )

这无效但不会给你编译错误。(它只是将var设置为true)

但如果你习惯写

if ( true == status )

你正在制作一个拼写错误并错过编译器会给出错误的等号之一。

或者你可以使用equals:

if (name.equals("Peter"))

答案 3 :(得分:3)

if(status = true)会将状态设置为true,然后会看到true ...此if将始终为true

if(status == true)实际上是一张支票,这是您想要使用的

答案 4 :(得分:2)

在java中if ( status = true )是赋值,而不是比较。

答案 5 :(得分:2)

第一种情况不是比较。只是在分配status变量。并且将返回新的status值。在这种情况下是true

请参阅:

= Operator 返回操作数值。

== Operator 如果其操作数的值相等则返回true;如果其两个操作数在引用类型的情况下引用同一对象,则返回true。

答案 6 :(得分:2)

为了强调两个运算符之间的差异,您可以在短时间内尝试使用yoda条件。

Yoda条件是当您使用常量值作为第一个操作数时,因此您的代码将从if ( status = true )转换为if ( true = status )。您不能将任何内容分配给常量,因此编译器会给您一个语法错误(阻止成功编译)。使用Yoda条件将强制编译器给出语法错误,而不是警告。

我认为yoda条件源于非托管代码和较旧的编译器,并且不能在.NET语言中提供很多优点,但可能是学习差异的有趣方式。

答案 7 :(得分:1)

第一个用于分配, status = true ,第二个用于比较 status == true

答案 8 :(得分:0)

解释

If (Status = true){ 
// code execution
}

If (Status == true){ 
// code execution
}

如果您尝试检查2个值是否相等,请使用

value1 == value

如果您尝试将值分配给另一个变量,请使用

value1 == value

  

那么“If(value = value){}”是做什么的?

要解释这一点你需要知道,如果可以定义一个变量,Java会检查。 如果可能的话。

所以如果你写一个像

这样的代码
If (Status = true){
System.out.println("Variable Status successfully changed!");
} else {
System.out.println();
}

它会尝试将值“true”赋给变量Status,然后返回成功。 如果成功,将输入条件并且“变量状态已成功更改!”将被打印到控制台。

理论上

但是由于Java需要布尔值作为条件,因此它不起作用。