2011-01-31 34 views
6

可达代码,请看看这个Android的代码示例:的Java/Android的代码优化:请问Java的去除构建

private static final boolean aBoolean = false; 

... 

if(aBoolean){ 
    //do something like logs 
} 

在这种情况下,由于aBoolean的值是假的,它不能改变在运行时,//会执行类似logs语句的内容在构建时被忽略,还是仍然会构建,并且每次都会评估if?

我试图找到像前处理#DEFINE #IF行为......所以,当我编码,我得到我的日志,当我松开我切换一个值和我所有的调试代码被完全忽略。

(也是我想指出的是,我的问题就是Android面向所以如果在这个问题上的Java和Android之间的差异,请让我知道)

回答

3

检查记录是完全找到一个变量。即使代码没有得到优化,检查一个布尔条件几乎是没有操作,并且你是过早地优化。

但回答你的问题,它可能会得到优化。

-2

如果该语句是不可到达这总是会给编译时错误.....

如。如果你使用return statemnt b4任何代码,这会给编译时错误。

,但如果你使用这种类型的代码

如果(aBoolean){// 做一些 }

它们不受用Java来避免或byjava不会删除.......

+2

至少对于桌面Java来说,这是不对的,代码将被JIT删除。而且代码不会产生编译时错误。 –

+0

为什么-1在使用return之后尝试放置任何语句而没有任何条件。 这会给出错误“无法访问的代码语句”。 –

+0

具有已知-false条件的if子句从“不可达代码”检测中明确排除*,准确地说是允许这样的事情(基于编译时值的条件执行)。试试吧,你会看到的。 –