我正在浏览一些代码并遇到了这些问题:
public final static int CM_VALUE = 0x200;
public final static Integer CM = new Integer(CM_VALUE);
有人知道为什么作者在将其传递回Integer
之前将其保留为十六进制值?这样做是否会为代码增加任何好处?
答案 0 :(得分:2)
我的投票是为了方便。作者可能需要在集合中使用它,并希望在初始阶段初始化这些静态以提高速度。
......对这一个人的猜测很多!
答案 1 :(得分:1)
这取决于CM值的用法。如果将其用作位掩码或其他与位相关的操作,则可以增加清晰度。编译器输入与输入硬编码值的基值没有区别。
然而,奇怪的是,作者会将其转换为Integer对象,而不是将其用作普通的int。
答案 2 :(得分:0)
十六进制文字表示与十进制文字完全相同的位。
所以不,这对计算机来说并不是更好。
然而,根据使用情况,开发人员可能会更好地阅读。
例如:
private final int FLAG_A = 0x01;
private final int FLAG_B = 0x02;
private final int FLAG_C = 0x04;
private final int FLAG_D = 0x08;
private final int FLAG_E = 0x10;
private final int FLAG_F = 0x20;
private final int FLAG_G = 0x40;
private final int FLAG_H = 0x80;
可能比这更容易掌握(但这相当于!):
private final int FLAG_A = 1;
private final int FLAG_B = 2;
private final int FLAG_C = 4;
private final int FLAG_D = 8;
private final int FLAG_A = 16;
private final int FLAG_B = 32;
private final int FLAG_C = 64;
private final int FLAG_D = 128;
答案 3 :(得分:0)
该值可能是位掩码,也可能是外部定义的常量。在位掩码的情况下,最好将它们存储为十六进制值,以使其更明显地在做什么。如果它是一个外部常量,那么使用与定义相同的基数来更容易找到任何拼写错误。
答案 4 :(得分:0)
当您想要处理二进制表示时,使用十六进制非常有用,因此0x200
比二进制表示1000000000
更简单。
答案 5 :(得分:0)
也许编写这个程序员的地方有一个规则,即源代码中一定不存在硬编码常量,并且应该始终通过为它们定义静态最终变量来使用常量。在我看来,这样的规则可能是好的,但在这个例子中它可能已经走得太远了。
请注意,一般情况下,最好不要使用new Integer(...)
,而是使用Integer.valueOf(...)
。如果您使用Integer
而不是显式创建新的valueOf
对象,则类Integer
可以重用对象。
public final static int CM_VALUE = 0x200;
public final static Integer CM = Integer.valueOf(CM_VALUE);
更好的是,只需使用自动装箱,这样就不需要CM_VALUE
:
public final static Integer CM = 0x200;