让我们说如果有一个布尔变量状态。假设状态值为false。
我想知道
之间有什么区别if ( status = true )
{
//block of code
}
if ( status == true )
{
//block of code
}
我试图通过编写一个示例程序来理解它,第一个if块中的代码被执行,无论值状态是什么(true或false)。
对于其他原始类型,如果我只使用一个“=”if和为什么它不会在布尔类型的情况下抛出错误,则系统会抛出编译时错误。感谢。
答案 0 :(得分:21)
第一个不是比较,它是一个任务。它编译的原因是它分配了一个布尔值,因此赋值的结果也是一个布尔值。
第一个语句为status
分配一个新值,并根据新值(if
在您的情况下)执行true
。第二个语句将status
的当前值与右侧的值进行比较,并对比较结果起作用。
请注意,将Java中的boolean
或C#中的bool
与true
或false
进行比较绝不是一个好主意:您可以使用if (status)
代替if (status == true)
和if (!status)
代替if (status == false)
。但是,这不适用于C#中的 nullable 类型,因此将bool?
与true
或false
进行比较通常是个好主意。
答案 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需要布尔值作为条件,因此它不起作用。