Java 从int创建整数对象有什么价值吗?

Java 从int创建整数对象有什么价值吗?,java,Java,我在浏览一些代码时遇到了以下几行代码: public final static int CM_VALUE = 0x200; public final static Integer CM = new Integer(CM_VALUE); 有人知道作者为什么在将值传递回Integer之前以十六进制保存该值吗?这样做会给代码带来好处吗?这取决于CM值的使用情况。如果它被用作位掩码或其他与位相关的操作,则可以增加清晰度。对于编译器输入来说,硬编码值作为什么基值输入是没有区别的 然而,奇怪的是,作者随后

我在浏览一些代码时遇到了以下几行代码:

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

有人知道作者为什么在将值传递回
Integer
之前以十六进制保存该值吗?这样做会给代码带来好处吗?

这取决于CM值的使用情况。如果它被用作位掩码或其他与位相关的操作,则可以增加清晰度。对于编译器输入来说,硬编码值作为什么基值输入是没有区别的


然而,奇怪的是,作者随后会将其转换为整数对象,而不是将其用作普通整数。

十六进制文字表示与其十进制对应项完全相同的位

所以不,这对电脑来说并不是更好

但是,根据使用情况,开发人员可能更易于阅读

例如:

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;
可能比这更容易理解(然而,这是等效的!)


该值可能是位掩码,也可能是外部定义的常量。在位掩码的情况下,最好将它们存储为十六进制值,以便更清楚地显示您正在做什么。如果它是一个外部常量,那么使用与定义相同的基数以便于查找任何打字错误是有意义的。

我的投票是为了方便。作者可能需要在集合中使用它,并希望在类init time初始化这些静态以提高速度


…关于这件事的猜测太多了

当您想处理二进制表示时,使用十六进制是很有用的,因此
0x200
比二进制表示法
100000000

可能是编写此代码的程序员有一条规则,即源代码中不能有硬编码常量,这些常数应该通过为它们定义一个静态的最终变量来使用。在我看来,这样的规则可能是好的,但在这个例子中,它可能走得太远了

请注意,通常最好不要使用
newinteger(…)
,而是使用
Integer.valueOf(…)
。如果使用
valueOf
而不是显式创建新的
Integer
对象,则类
Integer
可以重用对象

public final static int CM_VALUE = 0x200;
public final static Integer CM = Integer.valueOf(CM_VALUE);
更好的是,只需使用自动装箱,这样就更不需要使用
CM\u值了

public final static Integer CM = 0x200;

0x200
512
对于编译器来说是一样的,表示法是为代码的读者准备的。我没有这段代码的上下文,但是如果它用于依赖于使用位和字节的操作,它可能更容易理解嗯,这可能是为了可读性——我想可能是一个位标志,或者是一些用十六进制表示的代码。@MarkisT您的意思肯定是
0x00000539
?这些代码可能来自自动装箱之前的日子(
public final static Integer CM = 0x200;