从int创建Integer对象有什么价值吗?

时间:2011-09-30 15:50:28

标签: java

我正在浏览一些代码并遇到了这些问题:

public final static int CM_VALUE = 0x200;
public final static Integer CM = new Integer(CM_VALUE);

有人知道为什么作者在将其传递回Integer之前将其保留为十六进制值?这样做是否会为代码增加任何好处?

6 个答案:

答案 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;