1
假設我有一個方法foo
:我應該在斷言中裝箱還是取消裝箱?
public Integer foo() { return 1; }
哪個以上到選項的較小昂貴?拳擊還是拆箱?
assert(1, (int) foo()));
與
assert((Integer)3, foo());
假設我有一個方法foo
:我應該在斷言中裝箱還是取消裝箱?
public Integer foo() { return 1; }
哪個以上到選項的較小昂貴?拳擊還是拆箱?
assert(1, (int) foo()));
與
assert((Integer)3, foo());
我認爲基本類型變量比較多於對象比較快。拳擊也需要更多的時間來創建包裝對象。所以你應該在斷言中使用拆箱。
了上述期權的較小貴嗎?拳擊還是拆箱?
你正專注於錯誤的問題,當你問這是少昂貴。這是過早優化的一個例子,使用包裝類會對性能產生輕微的影響。所以,如果你想優化你應該使用原始int
。
public int foo() { return 1; }
並且不要試圖優化斷言,它們可以(也可能應該)在生產環境中被禁用。
從java -help
java -help | grep assertions -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions with specified granularity -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions with specified granularity -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions
這只是一個簡單的例子,使問題更容易理解,或者這是真實的情況嗎?這是waaaaaay太微觀優化。選擇最易讀,更易於理解的方式。即使性能存在差異(因爲可能不存在),如果您運行該代碼的次數達到了一千次,您會在納秒級別上發生變化! – acdcjunior
你爲什麼要返回一個'Integer'? –