Java中static final语句能优化掉不? void func(){ //if语句能优化掉不? if(bLog){ logger.debug("xxx" + "yyy" + "zzz"); }}static final boolean bLog = false;类似上面的代码能优化掉不? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [code=Java][void func(){ //if语句能优化掉不? if(bLog){ logger.debug("xxx" + "yyy" + "zzz"); }}static final boolean bLog = false;/code]那就替换为:void func(){} 会优化掉这个叫条件编译可以用jd-gui反编译这个类看看结果 首先。楼主你理解上面这么写的意思么?final 只能被赋值一次。所以你的if语句按上面这么写 是永远也走不到这句logger.debug("xxx" + "yyy" + "zzz");什么叫优化呢。优化是指把代码在不改变程序原意的情况下,改得效率更高,出错率更低。。所以,你这已经不算优化了。 应该优化掉吧,否则blog已经是不允许改变的最终结果了,再对它做if判断显得不是很有意义吧。 在写程序过程中,通常要输出log。但是是某些情况下,为了提高性能,又要把log功能去掉。比如这句:logger.debug("xxx" + "yyy" + "zzz");如果是用log4j来输出这句话,无论log4j的的配置是什么,"xxx" + "yyy" + "zzz",这个字符串连接的操作都会执行(当然,对于上面这句,编译器应该会优化掉)。如果是在关键地方有这种语句,显然不能令人满意。上面的的程序就是为了方便去掉,或者加上log功能。只需要修改一下 bLog的值即可。 可能我的意思没说明白。我的意思是编译器会不会把这if语句优化掉。而是不代码能不能把if语句去掉。 这不是应该先定义后使用? so compiled failed! Mark! 下面回答的人都沒看懂嗎?程序是對的! 我都看不下去了。知道什麼叫static不 人家方法先走的static再走的func()這個方法,能跑的。如果只是這段代碼的優化,你可以把那個boolean的類型定義為一個內部變量,結果寫為true不然進不去,final的修飾改不了值的,logger.debug("xxx" + "yyy" + "zzz");這個改為 “xxx”.concat("yyy").concat("zzz"){據說使用java提供的基類速度要快些}。 一个关于栈的java编程题,高手帮忙看一下,给个解决方案 第一次奇怪的JSP删除数据库记录问题,执行删除语句ResultSet就为空 java怎么检查能不能连接到网络? 关于SimpleDateFormat.parse的一个处理错误的。 为什么我的JBuilderX不能输入中文?? DatagramSocket是不是一个socket? javaBean jar打包问题 intellJ idea 3.0.5怎么才能支持assert? 网上邻居... 关于布局管理中的FlowLayout 大神帮看看,为什么repaint()方法没有实现我对组件的重绘 不同的系统运行相同的代码,结果不同
[code=Java][
void func(){
//if语句能优化掉不?
if(bLog){
logger.debug("xxx" + "yyy" + "zzz");
}}static final boolean bLog = false;/code]
那就替换为:
void func(){
}
可以用jd-gui反编译这个类看看结果
final 只能被赋值一次。所以你的if语句按上面这么写 是永远也走不到这句
logger.debug("xxx" + "yyy" + "zzz");
什么叫优化呢。优化是指把代码在不改变程序原意的情况下,改得效率更高,出错率更低。。
所以,你这已经不算优化了。
比如这句:
logger.debug("xxx" + "yyy" + "zzz");
如果是用log4j来输出这句话,无论log4j的的配置是什么,"xxx" + "yyy" + "zzz",这个字符串连接的操作都会执行(当然,对于上面这句,编译器应该会优化掉)。如果是在关键地方有这种语句,显然不能令人满意。
上面的的程序就是为了方便去掉,或者加上log功能。只需要修改一下 bLog的值即可。
我的意思是编译器会不会把这if语句优化掉。
而是不代码能不能把if语句去掉。
這個改為 “xxx”.concat("yyy").concat("zzz"){據說使用java提供的基類速度要快些}。