黑马程序员技术交流社区

标题: 关于if选择语句容易出错的,机智的小伙伴来看看吧 [打印本页]

作者: a5231865    时间: 2015-6-6 21:55
标题: 关于if选择语句容易出错的,机智的小伙伴来看看吧
1.
                          int k ;       
                          if(true)
                          k=1;
                          else if (false)
                           k=2;
                           System.out.println(k);
2.
                         int i ;
                         int a =3;
                         if(a==3)
                        i=1;
                        else if (a==1)
                         {
                        i=3;
                        }

                System.out.println(i);
猜猜上面两个句子编译的结果分别是什么?为什么呢?


作者: a5231865    时间: 2015-6-6 21:58
要是超过5个伙伴回复,我就把见解发出来!,话说谁能告我直接发代码行?
作者: CoeusLYJ    时间: 2015-6-6 21:58
求大神解答 ~~~
作者: vic0001    时间: 2015-6-6 22:07
第一个1,第二个报错
作者: langxiao505    时间: 2015-6-6 22:09
第一个是1,第二个报错!!这是为什呢?
作者: 小乎乎    时间: 2015-6-6 22:27
难道是第一个输出k为1,第二个报错……木运行,大胆揣测勒
作者: DAN66    时间: 2015-6-6 22:28
还以为都报错。。
作者: QQheima    时间: 2015-6-6 22:31
想知道答案吗?{:2_42:}

因为回复超过5条后,就给黑马币了{:2_31:}
作者: 君子无醉    时间: 2015-6-6 22:36
第一个是1  因为if括号里的判断如果是true.后面的代码就会执行,现在直接定义true 当然会执行
第二个会报错,因为你这一大串代码想要运行 要么在类的一个方法中 要么在main方法在 但不管在哪,都属于方法中 也就是i a都属于局部变量,也就是说i必须要有初始化值,所以报错。。不知我分析的对吗?
作者: 君子无醉    时间: 2015-6-6 22:38
第一个i没赋值,但是不报错 是不是因为if永远为真 必执行?
作者: 一米阳光abc    时间: 2015-6-6 22:49
第一个是1,第二个报错,i没有初始化值。
作者: 你们敬爱的人    时间: 2015-6-6 22:54
第一个1,第二个第一句就错了,局部变量必须赋初始值.
作者: a5231865    时间: 2015-6-6 22:55
一米阳光abc 发表于 2015-6-6 22:49
第一个是1,第二个报错,i没有初始化值。

和第一个的区别呢?
作者: 小乎乎    时间: 2015-6-6 23:06
君子无醉 发表于 2015-6-6 22:36
第一个是1  因为if括号里的判断如果是true.后面的代码就会执行,现在直接定义true 当然会执行
第二个会报错 ...

分析很细,此处有掌声
作者: qian0217wei    时间: 2015-6-6 23:06
本帖最后由 qian0217wei 于 2015-6-6 23:10 编辑

第一个结果是1,因为if判断值为true直接执行语句,所以1赋值给k,所以打印结果是1;第二个编译会报错,提示未初始化变量,因为jvm在判断是,认为a可能即不满足1,有不满足3,这样打印i就会出现未初始化变量,
和第一题不一样在于,第一个要么true ,要么false ,jvm认为k肯定会被赋值就不会报错!

作者: 小乎乎    时间: 2015-6-6 23:07
QQheima 发表于 2015-6-6 22:31
想知道答案吗?

因为回复超过5条后,就给黑马币了

所以,真的发黑马币麽
作者: a5231865    时间: 2015-6-6 23:10
第一个:编译器在判断这个语句时,会查看if和else if中是否有给k赋值,然后因为看到true就判断这个if else if 最后一定会有值,即k肯定会被初始化,因此编译通过;但第二个虽然逻辑上a==3为真,可是编译器编译时只检查语法错误,具体运算是要等编译通过后虚拟机去执行的,因此编译器在编译时不确保if else if中一定会有值,所以报错

作者: 君子无醉    时间: 2015-6-6 23:14
小乎乎 发表于 2015-6-6 23:06
分析很细,此处有掌声

3Q~




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