目前我正在使用:
int a=10;
if(a=20)
printf("TRUE");
else
printf("false");
以C为单位打印值TRUE
。
但是对于java:
int a=10;
if(a=20)
System.out.println("TRUE");
else
System.out.println("FALSE");
我会收到有关不兼容类型的编译时错误。
答案 0 :(得分:13)
原因是在C中没有特定类型boolean
- 而是任何非0整数求值为布尔值“true”。因此在您的C代码中:
if(a=20)
a
被赋值为20,非0 - 条件被评估为true
在java中,有一个基本类型boolean
,条件内if
的值必须是这种类型。
a=20
Java中的将20分配给a
,并将评估的最终结果返回为integer value 20
,但是预期类型为boolean
- 因此您会收到关于不兼容的编译时错误类型。
但是,如果要对a
与20进行比较,则需要在C和Java中使用==
运算符:
if(a == 20)
这将在C和Java中编译,并以两种语言打印FALSE。
答案 1 :(得分:7)
您需要将=
替换为==
。
=
是一个赋值运算符
int a=10;
if(a==20){
System.out.println("TRUE");}
else{
System.out.println("FALSE");}
这应该可以正常工作。
编辑:
在C中,赋值的返回整数值(在本例中为20)是一个正整数,其计算结果为true。 在java中,需要一个布尔值。
(请参阅Aleks G提供的更全面的答案)
答案 2 :(得分:2)
单个=
是赋值。如果要测试相等性,可以在C和Java中使用 double ==
很明显你做错了,即使在C版本中也是如此,因为你将a
设置为10然后,在“比较”它为20时,你得到一个真正的值。我不知道任何数学系统,其中10和20被认为是相等的: - )
你的C案例中发生的事情是,作业实际上也“返回”一个值。
声明:
if (a = 20) ...
相当于:
a = 20;
if (a) ...
所以它首先将a
设置为20,然后将其用作if
条件。由于0为假且其他任何条件都为真,因此执行if
的正文。
一个好的编译器(比如gcc
)实际上会警告你正在做什么,这样你就不会被这些小东西所困扰。有些人还使用了首先放置常量的技巧:
if (20 == a) ...
这样,如果你错误地使用赋值,那就是语法错误。但是我发现那种代码很难看,特别是因为我主要使用上面提到的那些好的编译器: - )
您在Java中遇到错误的原因是因为它对您可以对分配执行的操作要严格得多。这样,我的意思是没有像C一样从int
到boolean
的自动转换。所以这段代码拒绝编译,产生错误:
class Test {
static public void main(String[] args) {
int a = 10;
if (a = 20)
System.out.println ("true");
}
}
但你可以仍然被这样的事情烧伤:
class Test {
static public void main(String[] args) {
boolean a = false;
if (a = true)
System.out.println ("true");
}
}
因为该赋值在if
内是一个布尔值,所以它不会因错误的类型而导致编译错误。但是,由于它打印true
,它仍然不是你想要的。
底线,回去重新阅读第一段。 =
是赋值,==
是等式检查。
答案 3 :(得分:0)
为了进行比较,您应该使用==
if(a==20)
代替a=20
,即作业
答案 4 :(得分:0)
使用==
来测试条件,而不是=
。这样,您分配20
to
a而不是测试条件。
答案 5 :(得分:0)
if(a == 20)...或
的System.out.println(A == 20);
答案 6 :(得分:0)
a=20
的值为20.您应该使用==
运算符。