为什么我的if条件不接受java中的整数?

时间:2012-02-16 12:44:45

标签: java if-statement

目前我正在使用:

 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");

我会收到有关不兼容类型的编译时错误。

7 个答案:

答案 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一样从intboolean的自动转换。所以这段代码拒绝编译,产生错误:

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.您应该使用==运算符。