黑马程序员技术交流社区

标题: 用代码验证Java与C不同,在Java中int类型的值不能直接代替bo... [打印本页]

作者: zhiyi    时间: 2014-12-28 11:06
标题: 用代码验证Java与C不同,在Java中int类型的值不能直接代替bo...
可能是前一段时间学的不扎实,今天出了个小问题:在Java中byte、short、long、float、double这些基本类型数据无法直接转换为Boolean类型,用(Boolean)这样的强制转换也不行。但是可以使用带有逻辑运算符的表达式(合法的),或Boolean类型的变量,另外Boolean类型的数据无法像int、float等数据哪样参加加减乘除运算。希望跟我一样新学员注意了具体情况是这样的,
//求10以内的偶数的和
class ac
{
        public static void main(String [] args)
        {
                int i,sum;
                i=10;
                sum=0;


                while (i)
                {
                        if(i%2)sum+=i;
                        i--;
                }
                        System.out.println(i+"\t以内的偶数的和为:\t"+sum);
               
        }
}

编译不通过,提示如下
F:\javaTest>javac test5.java                                   
test5.java:10: 错误: 不兼容的类型: int无法转换为boolean        
                while (i)                                      
                       ^                                       
test5.java:12: 错误: 不兼容的类型: int无法转换为boolean
                        if(i%2)sum+=i;                        
                            ^                                                                              
2 个错误                                                                                                
F:\javaTest>                                                                                       

在C中这样是可以的,在C中没有Boolean类型的数据,因此条件表达式的值是这样判断的:表达式的结果为0,就为假,否则为真。在一些脚本语言里这样也可以运行,但在Java中不行,并不是因为Java不好,而是因为Java语法规则更严谨。
之后,我还将i的类型改为byte、short、long、float、double甚至char进行测试,编译都无法通过
也就是说,在Java中byte、short、long、float、double这些基本类型数据无法直接转换为Boolean类型,用(Boolean)这样的强制转换也不行,如下:
class ac
{
        public static void main(String [] args)
        {
                int i,sum;
                i=10;
                sum=0;

                while ((Boolean)i)
                {
                        if((Boolean)(i%2))sum+=i;
                        i--;
                }
                        System.out.println(i+"\t以内的偶数的和为:\t"+sum);

        }
}

这样改了以后就可以了
class ac
{
        public static void main(String [] args)
        {
                int i,sum;
                i=10;
                sum=0;

                while (i!=0)
                {
                        if(i%2==0)sum+=i;
                        i--;
                }
                        System.out.println(i+" 以内的偶数的和为:\t"+sum);

        }
}
编译运行皆正常:
F:\javaTest>javac test5.java  
                              
F:\javaTest>java ac           
10 以内的偶数的和为:   30   
                              
F:\javaTest>                  

另外Boolean类型的数据无法像int、float等数据哪样参加加减乘除运算,如这样是不行的:
Boolean b;
int c;
c=2*b+3;
新人新帖,请多指教、鼓励!谢谢!:)



作者: duluhua    时间: 2014-12-28 19:26
感谢楼主分享^^




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2