繁体   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