if(false){some code}在java中的含义是什么?

Bal*_*lon 6 java if-statement

Java代码

if(x == null){
 //some code
}
if(false){
 //some code
}
Run Code Online (Sandbox Code Playgroud)

什么时候if(false){code}执行?

Nan*_*nne 16

它永远不会被执行.有时人们会在他们想要记住的旧代码或者一些尚未使用的新代码时执行此操作.喜欢

if(false){fancyNewFunction();}
Run Code Online (Sandbox Code Playgroud)

(就我而言,这是不好的形式,你不应该这样做,但这并不意味着它不会发生;))


Edw*_*rzo 8

这也可以是模拟#ifdefine等宏预处理程序指令的常用方法.有些人用它来启用或禁用日志记录.

例如以下代码:

public class Sample{

    private static final boolean LOG_ENABLED = true;

    public static void main(String args[]){
        if(LOG_ENABLED){
            System.out.println("Hello World");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

生成以下字节码:

public class Sample extends java.lang.Object{
public Sample();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   getstatic   #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc #3; //String Hello World
   5:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:   return

}
Run Code Online (Sandbox Code Playgroud)

如果禁用该标志,则会获得以下字节码:

public class Sample extends java.lang.Object{
public Sample();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   return

}
Run Code Online (Sandbox Code Playgroud)

如您所见,main方法中没有为第二种情况生成字节码.因此,如果禁用日志记录并重新编译代码,则可以改进基础字节码.

  • +1.只是声明"永远不会执行"的其他答案并不完全正确.代码在物理上被编译器删除,并且是Java编译器规范的一部分. (2认同)

Jas*_*n S 5

我用

if (false)
{
   doSomething();
}
Run Code Online (Sandbox Code Playgroud)

有时会阻止执行doSomething().

这样做可能会更好/更清楚:

final static private boolean ENABLE_WOLZOPPERY = false;

if (ENABLE_WOLZOPPERY)
{
   wolzopp1();
}
blah_blah_blah();
if (ENABLE_WOLZOPPERY)
{
   wolzopp2();
}
Run Code Online (Sandbox Code Playgroud)

这样单个常量就可以以一种命名方式启用/禁用多个块的行为。

  • 为什么不直接注释掉它而不是使用 if(false) 呢? (3认同)