3

可以说是否有布尔变量状态。假设 status 的值为 false。

我想知道有什么区别

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

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

我试图通过编写一个示例程序来理解它,第一个 if 块中的代码会针对任何值状态(真或假)执行。

对于其他原始类型,如果我在 if 中仅使用一个“=”,系统会引发编译时错误,以及为什么它不会在布尔类型的情况下引发错误。谢谢。

4

9 回答 9

21

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

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

boolean请注意,在 Java 或boolC# 中与trueor进行比较从来都不是一个好主意false:您可以使用if (status)代替if (status == true)if (!status)代替if (status == false). 但是,这不适用于C# 中的可为bool?类型,因此比较trueorfalse通常是一个好主意。

于 2013-01-11T12:08:49.500 回答
10

if ( status = true )将永远是真的,因为你首先分配truestatus. 另一方面,if ( status == true )只会是真的它status是真的。

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

if (status) { }
于 2013-01-11T12:09:31.010 回答
4

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

if (status)
if (!status)

(这仅适用于布尔值)

或者

if ( true == status )

if ( "Peter" == name )

这种 var 和 string/value 位置的交换适用于所有变量类型,一些编码人员使用它来避免使用=and的拼写错误==

因为如果你不小心写了

if ( status = true )

代替

if ( status == true )

这不起作用,但不会给你一个编译器错误。(它只会将 var 设置为 true)

但是如果你习惯写

if ( true == status )

你打错了,错过了编译器会出错的一个等式标志。

或者你可以使用等于:

if (name.equals("Peter"))
于 2013-01-11T12:13:31.787 回答
3

if(status = true) 将状态设置为true,然后它会看到true...这if将永远是true

if(status == true)实际上是一个检查,这就是你要使用的

于 2013-01-11T12:09:02.440 回答
2

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

于 2013-01-11T12:09:14.007 回答
2

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

看:

= 运算符 将操作数值作为结果返回。

== 运算符 如果其操作数的值相等则返回真,如果它的两个操作数在引用类型的情况下引用同一个对象,则返回真。

于 2013-01-11T12:10:25.470 回答
2

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

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

我相信 yoda 条件源自非托管代码和较旧的编译器,并且在 .NET 语言中没有提供很多好处,但可能是一种了解差异的有趣方式。

于 2013-01-11T12:27:36.387 回答
1

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

于 2013-01-11T12:14:25.287 回答
0

的解释

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

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

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

value1 == value

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

value1 == value

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

为了解释这一点,您需要知道,Java 检查是否可以定义变量。如果有可能,Java 可以。

所以如果你写一个像

If (Status = true){
System.out.println("Variable Status successfully changed!");
} else {
System.out.println();
}

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

理论上

但是由于 Java 需要一个布尔值作为条件,所以它不会起作用。

于 2014-07-01T09:39:46.783 回答