关于 if(true) 与 Unreachable code

海中一片帆 2014-08-28 11:06:22
void test() {
int i;
if(true)
i = 8;
System.out.println(i);//这里没有报错,JAVA编译器认为i=8这行代码一定会执行


if(true)
return;//按照上面的想法,JAVA编译器应该也会认为这行代码一定会执行,那么下面一行的代码应该就是Unreachable code,但实际这样写就是没有错
System.out.println("code");
}


问题在注释中,还望求解
...全文
954 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
clover灬 2014-09-04
  • 打赏
  • 举报
回复
楼主有点钻牛角尖,还从来没有见过直接一个return后面有Java代码,if语句中有return倒是很正常的,return前有if(true)和前面没有逻辑判断不是等价的,虽然if(true)肯定会判断通过
as1dasd11 2014-09-04
  • 打赏
  • 举报
回复
if(true) if(false)这样的代码都会被干掉。没啥意思
as1dasd11 2014-09-04
  • 打赏
  • 举报
回复
import java.io.PrintStream;

public class Main1
{
  public static void main(String[] args)
  {
    new Main1().test();
  }

  void test()
  {
    int i = 8;
    System.out.println(i);
  }
}
这是反编译后的代码
豫让_______ 2014-09-04
  • 打赏
  • 举报
回复
是不是要表达这个意思,if()里面的内容在没有运行的时候是没有判断能力的(当然像myeclipse这种工具会自动检查)。而编译器检查你的代码的时候是检查格式或者一些简单的错误并没有逻辑判断能力,如17楼所说,很多错误只能运行时检测出来!所以编译器当成普通的if判断,并没有语法错误,所以没报错。
Snail___ 2014-09-04
  • 打赏
  • 举报
回复
Snail___ 2014-09-04
  • 打赏
  • 举报
回复
摆烂办不到 2014-09-03
  • 打赏
  • 举报
回复
运行时检查。
scott_129 2014-09-02
  • 打赏
  • 举报
回复
if()条件在编译的时候,其实是不会判断你的条件到底是true还是false,所以当你在if(true) return;后面继续写代码,编译时是判断如果if为false,则后面的代码还有机会执行。但是你直接在if(true){return;再写代码};是肯定会报错的。
lxraiyl 2014-09-02
  • 打赏
  • 举报
回复
引用 13 楼 u010071470 的回复:
[quote=引用 12 楼 lxraiyl 的回复:] [quote=引用 8 楼 u010071470 的回复:]
void test() {
		return;
		System.out.println("code");
	}
可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error
这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个:

     if(true)
     return;
    System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。[/quote] 你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译[/quote] while(true)后面有代码也不能通过编译?你确定?只要while(true)里面有break语句就可以通过编译呀
lxraiyl 2014-09-02
  • 打赏
  • 举报
回复
引用 13 楼 u010071470 的回复:
[quote=引用 12 楼 lxraiyl 的回复:] [quote=引用 8 楼 u010071470 的回复:]
void test() {
		return;
		System.out.println("code");
	}
可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error
这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个:

     if(true)
     return;
    System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。[/quote] 你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译[/quote] 大哥你真敢说话呀,用过java多线程的谁没有写过while(true)语句,while(true)是一个死循环,if(ture)是么?
海中一片帆 2014-09-02
  • 打赏
  • 举报
回复
引用 12 楼 lxraiyl 的回复:
[quote=引用 8 楼 u010071470 的回复:]
void test() {
		return;
		System.out.println("code");
	}
可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error
这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个:

     if(true)
     return;
    System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。[/quote] 你说得完全错误,这里编译器已经确定条件肯定是为真的了,我用的是 “true” 这个字面量,而不是一个"true"引用变量, 你肯定没有写过 while(true) 这种代码, while(true) 后面有代码也不能通过编译
lxraiyl 2014-09-02
  • 打赏
  • 举报
回复
引用 8 楼 u010071470 的回复:
void test() {
		return;
		System.out.println("code");
	}
可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error
这个肯定是报错的呀,return后面不能再跟语句了。至于你说的那个:

     if(true)
     return;
    System.out.println("code");
这段代码虽然从逻辑上说最后一句永远不可能执行,但是在编译的时候并不会做这种检查。编译器认为最后一句话当条件判断为错误的时候是可以执行的,所以不会给出错误提示。当然某些IDE会给出警告,但不是错误。
lxraiyl 2014-09-02
  • 打赏
  • 举报
回复
引用 10 楼 qu1210 的回复:
这个问题,楼主把return,break,continue之间区别的搞清,没必要在这块纠结。
是你没有搞清楚楼主的意思
qzw1210 2014-09-02
  • 打赏
  • 举报
回复
这个问题,楼主把return,break,continue之间区别的搞清,没必要在这块纠结。
humanity 2014-09-02
  • 打赏
  • 举报
回复
这是编译器基于性能考虑没有去检查这种。而其它的 IDE 则提醒我们可能我们写错了代码。
海中一片帆 2014-08-31
  • 打赏
  • 举报
回复
void test() {
		return;
		System.out.println("code");
	}
可能我没说清楚,那为何上面这行代码直接就报错,我说的报错不是指警告,而是说 Error
A280104758 2014-08-30
  • 打赏
  • 举报
回复
好像确实遇到这种情况就把那句删除的
S117 2014-08-30
  • 打赏
  • 举报
回复
错到没错,只是警告下你而已
一大三千 2014-08-30
  • 打赏
  • 举报
回复
2楼版主大大,正解。eclipse的javadoc会报警的,但楼主指的那行在运行时还是会执行,那么下一行就无法访问了。
「已注销」 2014-08-29
  • 打赏
  • 举报
回复
有警告的。
加载更多回复(3)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧