黑马程序员技术交流社区

标题: 关于if不加大括号的问题 [打印本页]

作者: 千殇轮回    时间: 2014-4-20 21:43
标题: 关于if不加大括号的问题
本帖最后由 千殇轮回 于 2014-4-21 22:00 编辑

class Test {
        public static void main(String[] args) {
                int i = 5;
                if (i<15)
                        System.out.println("aaaaaaaa");

                System.out.println("bbbbbbbb");
        }
}
上面的代码能通过编译,并打印出来
class Test {
        public static void main(String[] args) {
                int i = 5;
                if (i<15)
                        int x = 10;

                System.out.println("bbbbbbbb");
        }
}
这一段代码不能通过编译,为什么
作者: 左拉    时间: 2014-4-20 22:01
if()后面只有一行代码的时候才能省略括号,你这是两句啊
作者: 陨落″烟雨。    时间: 2014-4-20 22:18
if(i<15)
int x = 10;   //这个不通过是必须滴,因为这个JVM其实是拆分成  int x;    x=10;
                 //然而if语句不加大括号的话,只能执行一条语句,那就是执行int x;     ,
                 //你上面这个的句子相当于if(i<15){int x;} x = 10;     x这个变量会找不到的,直接编译报错
作者: 忘川    时间: 2014-4-20 22:29
本帖最后由 忘川 于 2014-4-20 22:30 编辑
  1. class Test
  2.         {
  3.         public static void main(String[] args)
  4.                         {
  5.                 int i = 5;
  6.                 if (i<15)
  7.                        int x = 10;        
  8.                                 /*这里执行了2个操作,1.声明一个int型变量x 2.赋值操作x=5,
  9.                                   不加花括号,JVM默认只执行第一行,即声明操作,
  10.                                   条件语句内部声明的变量,其生命周期在出了条件语句之后就停止了
  11.                                   所以if(i<15){int x} x=10 后面这个赋值操作他找不到x变量,所以抛了
  12.                                 */
  13.                 System.out.println("bbbbbbbb");
  14.                         }
  15. }

  16. class Test
  17.         {
  18.         public static void main(String[] args)
  19.                         {
  20.                 int i = 5;
  21.                 int x;
  22.                 if (i<15)
  23.                         x = 10;        //要么加花括号,要么这么写,声明操作和赋值操作分开写
  24.                                                                
  25.                 System.out.println("bbbbbbbb");
  26.                         }
  27. }

复制代码

作者: 孙旌棋    时间: 2014-4-20 22:30
同学, 这里这样写就可以了哦, 因为int x = 10;是两个操作的哦, 那么为什么不分解一下呢?if语句省略大括号的话可是只能执行一条语句的哦, 这里实际上是int x; x = 10;的哦
  1. class Test {
  2.          private static int x;

  3.                 public static void main(String[] args) {
  4.                  int i = 5;
  5.                  if (i<15)
  6.                          x = 10;
  7.                  System.out.println("bbbbbbbb");
  8.          }
  9. }
复制代码

作者: 悠然丶    时间: 2014-4-20 22:32
陨落″烟雨。 发表于 2014-4-20 22:18
if(i

正解                                    
作者: 四川男人    时间: 2014-4-20 22:39
  public static void main(String[] args) {
                 int i = 5;
                 if (i<15)
                         int x = 10;//          if后面不跟大括号的话,只能跟一句话,然而
                                         //      int x = 10;    jvm会将它看成两句:int x;  x=10;所以x  = 10 已经在if代码块
                                         //            块儿外面了,所以会报错

                 System.out.println("bbbbbbbb");
         }
作者: 宋大龙    时间: 2014-4-20 23:02
if语句如果省略大括号的话只可以执行离他最近的一句  看好是一句    你的第一个代码执行出来是aaaaaaaa吧   
而第二个代码   if (i<15)  int x = 10;  之所以会编译错误是因为  Java虚拟机在编译的时候  会把int x = 10;
看做  int x;   x = 10;  这样的话就成了两句话了  所以会报错




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