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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天方地圆 中级黑马   /  2014-4-10 21:56  /  701 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.          public static void main(String[] args)
  2.            {
  3.                      String s;
  4.                      int x = 99;
  5.              
  6.                      if (x < 100) s = "x is less than 100";
  7.                      if (x > 100) s = "x is greater than 100";
  8.                       System.out.println(s.length());
  9.             
复制代码

为什么编译通不过?哪里出了问题了?

3 个回复

倒序浏览
public class A{
public static void main(String[] args)
           {
                     String s;  // String s =null; 改成这样,即可通过编译 ;
                     int x = 99;
            
                     if (x < 100) s = "x is less than 100";
                     if (x > 100) s = "x is greater than 100";
                      System.out.println(s.length());
}
}

如果按找你的定义, 系统会提示s没有初始化;

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为 你程序中的 s 变量没有初始化,

后面是两条判断语句后才能给 s赋值;

编译时,虚拟机认为给s赋值这两句话有可能都执行不到,

但是你也没有初始化,所以就会报错了,

把s初始化一下就好了!

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 luoyilan222 于 2014-4-10 22:36 编辑

String s = null; 局部变量没有初始化


对于java的变量,我们知道有成员变量和局部变量。
关于他们的初始化,基本上所有书上都会写。成员变量,java会帮助你初始化,局部变量,则需要程序员自己初始化。

局部变量声明以后,Java 虚拟机不会自动的为它初始化为默认值。因此对于局部变量,必须先经过显示的初始化,才能使用它。
如果编译器确认一个局部变量在使用之前可能没有被初始化,编译器将报错。


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马