A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘一阳 中级黑马   /  2014-7-13 18:11  /  1073 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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了
第一个和第二个啥区别啊
解释下

6 个回复

倒序浏览
第一个编译不能通过,第二个正常运行,因为a是局部变量,不赋值无法参与运算,提示的意思就是要让a有个初始值
回复 使用道具 举报
两个编译都通过了
回复 使用道具 举报
应该是第二个编译通过,第一个编译问题吧,因为  if(b==1)是在if代码块里对 a=1;进行初始化,if代码块结束a变量就结束了,
回复 使用道具 举报
第二个那个a=2不也是在if代码块里面辅助的吗? 为啥if结束之后 还能输出a
回复 使用道具 举报
月影箫风起k 来自手机 中级黑马 2014-7-13 19:53:46
地板
不可能吧,应该第一个吧
回复 使用道具 举报
刘一阳 发表于 2014-7-13 18:35
第二个那个a=2不也是在if代码块里面辅助的吗? 为啥if结束之后 还能输出a

第二个编译通过是因为开始的时候已经初始化过了,后面的赋值有没有成功对编译运行就没影响了,第一个是一开始没有进行初始化,后面唯一的一个赋值语句是在if代码块中,而if代码块中的语句有可能无法执行到,因此,编译无法通过的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马