void func(){
    //if语句能优化掉不?
    if(bLog){
        logger.debug("xxx" + "yyy" + "zzz");
    }}static final boolean bLog = false;类似上面的代码能优化掉不?

解决方案 »

  1.   


    [code=Java][
    void func(){
        //if语句能优化掉不?
        if(bLog){
            logger.debug("xxx" + "yyy" + "zzz");
        }}static final boolean bLog = false;/code]
    那就替换为:
    void func(){
    }
      

  2.   

    会优化掉这个叫条件编译
    可以用jd-gui反编译这个类看看结果
      

  3.   

    首先。楼主你理解上面这么写的意思么?
    final 只能被赋值一次。所以你的if语句按上面这么写 是永远也走不到这句
    logger.debug("xxx" + "yyy" + "zzz");
    什么叫优化呢。优化是指把代码在不改变程序原意的情况下,改得效率更高,出错率更低。。
    所以,你这已经不算优化了。
      

  4.   

    应该优化掉吧,否则blog已经是不允许改变的最终结果了,再对它做if判断显得不是很有意义吧。
      

  5.   

    在写程序过程中,通常要输出log。但是是某些情况下,为了提高性能,又要把log功能去掉。
    比如这句:
    logger.debug("xxx" + "yyy" + "zzz");
    如果是用log4j来输出这句话,无论log4j的的配置是什么,"xxx" + "yyy" + "zzz",这个字符串连接的操作都会执行(当然,对于上面这句,编译器应该会优化掉)。如果是在关键地方有这种语句,显然不能令人满意。
    上面的的程序就是为了方便去掉,或者加上log功能。只需要修改一下 bLog的值即可。
      

  6.   

    可能我的意思没说明白。
    我的意思是编译器会不会把这if语句优化掉。
    而是不代码能不能把if语句去掉。
      

  7.   

    这不是应该先定义后使用?  so compiled failed!  Mark!
      

  8.   

    下面回答的人都沒看懂嗎?程序是對的! 我都看不下去了。知道什麼叫static不  人家方法先走的static再走的func()這個方法,能跑的。如果只是這段代碼的優化,你可以把那個boolean的類型定義為一個內部變量,結果寫為true不然進不去,final的修飾改不了值的,logger.debug("xxx" + "yyy" + "zzz");
    這個改為 “xxx”.concat("yyy").concat("zzz"){據說使用java提供的基類速度要快些}。