java的if里有多个if_代码里写很多if会影响效率吗?
看你怎么寫 if.
嵌入很多層if的代碼叫做“箭頭代碼”,是一個anti-pattern。 這種代碼會增加程序的循環復雜度 (Cyclomatic complexity)
具體可以看這里:Flattening Arrow Code
這里:
總的來說,程序里用if-else是有開銷的。每次condition的判斷就是一個計算,但是if-else的存在增加了程序語言的表達能力,提高了開發效率。
如果純粹從性能的角度看,不用if-else肯定比用好。但是在某些情況下CPU可以做到讓程序性能近似于沒有if-else的情況。stackoverflow上有一個經典問題:Why is it faster to process a sorted array than an unsorted array?
現代CPU在運行到if的時候,不會先判斷condition然后再選擇進入if-else的哪一個分支。它們真正做的是直接進入一個分支執行,如果猜錯則回滾此分支的操作然后換另一個分支執行。如果CPU每次都猜對,就會讓程序性能接近沒有if-else的情形;反之則會造成開銷。那么如何讓CPU猜對呢?如果condition 大部分時間都是true,少部分時間是false,那么CPU 就比較好猜,反之,如果condition的值是一個隨機值,那么CPU每次就得“瞎猜”,猜對的概率就會低了。
當然,如果你的if-else不是出現在循環里,一般不會造成太大開銷。
=============分割線==============================
回答一下討論區里的問題。因為我也不是做CPU的,就當拋磚引玉。希望大家指正!
現代CPU運行時不是一條命令一條命令的執行,而是一下讀進多條命令,并且對這些命令進行優化,生成流水線(pipeline)。優化后的流水線的運行效率是非常高的。生成流水線也是一個耗時的工作。CPU遇到if的條件語句時根據分支預測器的結果選擇跳轉還是不跳轉。并且把相應分支里的命令載入生成流水線。CPU同時還會并行地執行條件語句。如果對就繼續執行,如果錯就把當前分支的流水線拋棄然后載入另一個分支生成流水線。所以如果每次都猜對,程序的運行效率就會基本和沒有if差不多。
總結
以上是生活随笔為你收集整理的java的if里有多个if_代码里写很多if会影响效率吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想投影机t036价格是多少
- 下一篇: 临夏治无精症比较好的医院推荐