簡體   English   中英

哪個更有效?

[英]Which is more efficient?

所以我可能一直在重新發明輪子並編寫了Color類。

我有設置方法來設置顏色的紅色,綠色,藍色和Alpha值。 但是因為顏色存儲為int ,所以我必須執行一些數學運算才能正確完成此操作。 中途我開始懷疑以下哪個更有效:

public void setR(int r) {
    color = color - (color & 0xFF) + r;
}

public void setG(int g) {
    color = color - ((color >> 8) & 0xFF) + (g << 8);
}

public void setB(int b) {
    color = color - ((color >> 16) & 0xFF) + (b << 16);
}

public void setA(int a) {
    color = color - ((color >> 24) & 0xFF) + (a << 24);
}

...基本上,我采用舊的顏色值,減去舊的紅色/綠色/藍色成分,然后添加新的顏色。 我的第二個策略:

public void setR(int r) {
    color = (color & 0xffffff00) + r;
}

public void setG(int g) {
    color = (color & 0xffff00ff) + (g << 8);
}

public void setB(int b) {
    color = (color & 0xff00ffff) + (b << 16);
}

public void setA(int a) {
    color = (color & 0x00ffffff) + (a << 24);
}

...我在顏色上進行按位“或”運算以“減去”紅色/綠色/藍色/ alpha分量,然后添加新的分量。
我很確定第二種方法更有效,但是如果我錯了,請糾正我!

我會選擇更容易閱讀的內容。 我非常懷疑此類執行速度的微小變化會影響最終應用程序中可測量的任何內容。

就您而言,我建議您將RGBA值存儲為類中的單獨字段。 僅在需要時將它們組合成一個整數(例如,使用某種getter方法)。 那將使我成為最易讀,可維護的選擇。

JVM的JIT編譯器將負責這種優化。 所以真的沒關系。

如果您有疑問,請介紹兩個變體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM