Java '==';和'=';?
我知道其中一个是按位的,另一个是逻辑的,但我无法理解:Java '==';和'=';?,java,operators,Java,Operators,我知道其中一个是按位的,另一个是逻辑的,但我无法理解: Scanner sc = new Scanner(System.in); System.out.println("Enter ur integer"); int x=sc.nextInt(); if(x=0)//Error...it can not be converted from int to boolean System.out.println("..."); 该错误意味着x无法转换为布尔值,或者x=0的结果无法转换为布尔值==检查
Scanner sc = new Scanner(System.in);
System.out.println("Enter ur integer");
int x=sc.nextInt();
if(x=0)//Error...it can not be converted from int to boolean
System.out.println("...");
该错误意味着x
无法转换为布尔值
,或者x=0
的结果无法转换为布尔值==检查是否相等。
=是作业
== is an equality check. if (x == 0) // if x equals 0
= is an assignment. x = 0; // the value of x is now 0
您正在做的是:
if(x=Blah)
-在Java中,此语句是非法的,因为您无法测试赋值语句的状态。具体来说,Java不将赋值视为布尔运算,这是if语句中所必需的。这与C/C++相反,C/C++允许您将赋值视为布尔运算,并且可能是许多拉毛错误的结果。==是比较运算符,=是赋值
== is an equality check. if (x == 0) // if x equals 0
= is an assignment. x = 0; // the value of x is now 0
这里您将0的值赋给变量x。Java中的if语句不能像在许多其他语言中那样计算整型参数。在Java中,if需要一个布尔值。试一试
if(x == 0)
进行比较。当您写入“x=0”时,您说的是“将0存储在变量x中”。整个表达式的返回值为“0”(如下所示,您可以说x=y=0之类的傻话)
当你写'x==0'时,它会说“x等于0吗?”。此表达式的返回值将为“true”或“false”
在Java中,不能只说if(0),因为if需要一个真/假答案。因此,如果(x=0)不正确,但如果(x==0)正确。将错误解释为
“表情
x=0
无法转换为布尔值。“正如其他人所说,'='是赋值;'='是比较
在您的程序更改中
如果(x=0)
到
如果(x==0)
为了澄清C/C++的问题,赋值被计算为正确的操作数
if(a = n)
计算为n,因此(n=1)为真(n=0)为假
它给您错误的原因是您在if()中为x赋值,您应该在其中检查相等性。尝试将其更改为相等,而不是赋值运算符 我知道这个问题已经得到了回答,但这仍然不是程序员的错误,而是印刷错误(即程序员知道他的意思,但失败了)。这可能很难看出,因为两者看起来很相似
我发现一种避免这种情况的方法是将常量表达式放在左手边,如下所示:
if (0 == x)
...
这样,如果我不小心只使用了一个“=”符号,编译器将失败,并出现一个关于赋值给常量表达式的错误,无论赋值运算符是否为左关联运算符,以及if条件是否需要强类型布尔值。一个有趣的注意事项:由于赋值运算符求值为右操作数,以下内容在Java中是有效的(尽管不美观):
由于运算符优先级(“>”绑定比“=”强),因此需要使用括号。如其他人所述,=
在比较时赋值
然而,这些语句也有自己的价值
=
运算符返回其右侧操作数的值。这就是像a=b=c=5
这样的语句的工作原理:它们被解析为a=(b=(c=5))
,计算结果是a=(b=5)
,然后是a=5
=
运算符返回一个布尔值,如果其操作数相等,则该值为true
。if
语句在其参数为true
时运行其主体。因此,if
像if(5==5)
这样的标题将转换为if(true)
。这就是为什么有时您会看到无限while
循环,其标题为while(true)
;while
循环运行“while”参数为true
如果在If
语句中有boolean
,则如果分配的值(或“与之比较”)为true
,则不会给出错误并运行代码。这就是为什么不要混淆=
和=
运算符非常重要的原因,尤其是在使用布尔
时
希望这有帮助 位运算符和逻辑运算符适用于and(&)和OR(|)运算符,而不是等号运算符。此外,请更改sysout。再敲两下键盘就能救一只小狗(“ur”杀死小狗)。@Instantsoup:这就解释了lolcats。为什么这个问题被记下来了?是因为小狗的诱饵吗?这是一个正确的问题。为什么它被标记下来?C++编译器警告这个例子。因此,如果您正在查看警告错误,而不仅仅是编译器错误(推荐策略:),您会注意到它。它是一个equals表达式(可能是一个表达式语句)。表达式的值是右侧子表达式的值。如果x和y是布尔或布尔的,则完全正确(c=y)。C和C++允许它(带有警告),因为测试值是0还是不(粗略)。有布尔类型。@Neda,因为x和y都是布尔类型,如果(x=y)等于“将y的值存储在x中,如果新的x值为“true”,请执行一些操作。”具体来说,Java不将赋值视为布尔操作,这是if语句中所必需的。“-事实上,这是不正确的。x=Blah
的类型将是boolean
。。。当且仅当x
的类型为boolean
。
if (0 == x)
...
if (( x = blah ) > 0) ...