所以我可能一直在重新发明轮子并写了一个Color
课程。
我有setter方法来设置颜色的红色,绿色,蓝色和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);
}
...我正在对颜色进行按位OR运算,以减去&#34;红色/绿色/蓝色/ alpha组件然后添加新组件 我很确定第二种方式更有效但如果我错了请纠正我!
答案 0 :(得分:9)
我会选择更容易阅读的内容。我非常怀疑这个类的执行速度的微小变化会影响你最终应用程序中可测量的任何东西。
在您的情况下,我建议您将RGBA值存储为类中的单独字段。只在需要时将它们组合成一个整数(例如在一些getter方法中)。这将使我成为最易读,最易于维护的选择。
答案 1 :(得分:0)
JVM的JIT编译器将负责这样的优化。所以这并不重要。
如果您有疑问,请分析两种变体。