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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 正阳门下   /  2015-12-17 23:03  /  2535 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

很简单啊!
回复 使用道具 举报
李勋@1211 发表于 2015-12-18 23:13
我稍微改了下, 把for循环改成这个:
for(int i = 2;i > 1 ;);{
       System.out.println("hello");

我的理解,for循环的3个表达式的语句中,可以省略第一个,第三个,第二个条件判断表达式不能省略,否则编译器是认为对呢?还是错呢?(编译器是很笨的,所以就给你报错了),while(ture); 这就是一个死循环;编译器知道这是死循环;给不了你答案,就给你报错了;
回复 使用道具 举报
  1. for(; ;);{
  2.        System.out.println("hello");
  3. }
复制代码
如上代码
编译时,编译器能判断出 for(;;); 是一个完整的for循环,但是也是一个死循环,此时后面的代码快{System.out.println("hello");}就永远不会执行到,此时报错是报 unreachable错误。
  1. int i=2;
  2. while (i>1);{
  3.    System.out.println("World");
  4. }
复制代码
如上代码
编译时,局部变量还没有被赋值(代码编译后运行时才赋值为2),所以,编译器是无法判断while (i>1);是否是死循环,编译器编译的时候认为后面的代码块{System.out.println("World");}有可能会被执行到,所以编译不报错;
运行时,由于i已被赋值为2,while (i>1);是一个死循环,所以后面的代码块不会被执行到,jvm会卡死无响应,除非手动停止进程。
回复 使用道具 举报
焚寂 中级黑马 2015-12-20 11:07:12
24#
路过,水一下
回复 使用道具 举报
王冀仁 来自手机 中级黑马 2015-12-20 11:08:21
25#
[quote]正阳门下 发表于 2015-12-17 23:03
for(; ;);{
       System.out.println(

看了他们的回复我也明白了
回复 使用道具 举报
由一个分号引发的讨论。受教了,虽然不会这样做。
回复 使用道具 举报
考虑那个干什么啊
只要知道  ;   是最后的意思就行了
别乱加
回复 使用道具 举报
sorryjsy 发表于 2015-12-20 11:02
如上代码
编译时,编译器能判断出 for(;;); 是一个完整的for循环,但是也是一个死循环,此时后面的代码快{S ...

受教了,多谢哈
回复 使用道具 举报
sorryjsy 发表于 2015-12-20 11:02
如上代码
编译时,编译器能判断出 for(;;); 是一个完整的for循环,但是也是一个死循环,此时后面的代码快{S ...

受教了,多谢哈
回复 使用道具 举报
左大括号是不用加分号的,你这样写就直接结束了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马