黑马程序员技术交流社区

标题: 新手问题 求解答 [打印本页]

作者: 刘一阳    时间: 2014-7-13 18:11
标题: 新手问题 求解答
class asd
{       
        public static void main(String[] args)
        {
                int a;
                int b=1;
                if(b==1)
                {
                        a=1;
                }
                System.out.println(a);
        }
}*/

class asd
{       
        public static void main(String[] args)
        {
                int a=1;
                int b=1;
                if(b==1)
                {
                        a=2;
                }
                System.out.println(a);//2
        }
}
第二个编译没通过。

提示a没初始化 ,但是a已经定义类型了啊,而且if语句已经赋值给a了
第一个和第二个啥区别啊
解释下
作者: 燿陚√揚葳    时间: 2014-7-13 18:24
第一个编译不能通过,第二个正常运行,因为a是局部变量,不赋值无法参与运算,提示的意思就是要让a有个初始值

作者: fantacyleo    时间: 2014-7-13 18:26
两个编译都通过了
作者: 南柯一梦    时间: 2014-7-13 18:29
应该是第二个编译通过,第一个编译问题吧,因为  if(b==1)是在if代码块里对 a=1;进行初始化,if代码块结束a变量就结束了,
作者: 刘一阳    时间: 2014-7-13 18:35
第二个那个a=2不也是在if代码块里面辅助的吗? 为啥if结束之后 还能输出a
作者: 月影箫风起k    时间: 2014-7-13 19:53
不可能吧,应该第一个吧
作者: w306752855    时间: 2014-7-13 20:29
刘一阳 发表于 2014-7-13 18:35
第二个那个a=2不也是在if代码块里面辅助的吗? 为啥if结束之后 还能输出a

第二个编译通过是因为开始的时候已经初始化过了,后面的赋值有没有成功对编译运行就没影响了,第一个是一开始没有进行初始化,后面唯一的一个赋值语句是在if代码块中,而if代码块中的语句有可能无法执行到,因此,编译无法通过的。




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