Java 为什么HashMap内部工作助手变量是int,可以是字节数据类型
HashMap内部有自己的静态最终变量用于其工作Java 为什么HashMap内部工作助手变量是int,可以是字节数据类型,java,variables,hashmap,int,byte,Java,Variables,Hashmap,Int,Byte,HashMap内部有自己的静态最终变量用于其工作 static final int DEFAULT_INITIAL_CAPACITY = 16; 既然值太小,为什么他们不能使用byte数据类型而不是int。他们可以,但这将是一个微观优化,折衷方案是可读性和可维护性较差的代码(,任何人?) 这是一个静态的final变量,因此每个类加载器只分配一次。我想我们可以节省这3个字节(我在这里猜是这样的)。他们可以,但这将是一个微观优化,而折衷方案将是可读性和可维护性较差的代码(,任何人?
static final int DEFAULT_INITIAL_CAPACITY = 16;
既然值太小,为什么他们不能使用
byte
数据类型而不是int
。他们可以,但这将是一个微观优化,折衷方案是可读性和可维护性较差的代码(,任何人?)
这是一个静态的final变量,因此每个类加载器只分配一次。我想我们可以节省这3个字节(我在这里猜是这样的)。他们可以,但这将是一个微观优化,而折衷方案将是可读性和可维护性较差的代码(,任何人?)
这是一个静态的final变量,因此每个类加载器只分配一次。我想我们可以节省这3个字节。很多数据可以表示为一系列字节 Int是大多数用户在计算或处理整数时使用的默认数据类型 使用Byte的问题是编译器无法识别它进行类型转换 只要你试过
int variablename = bytevariable;
然而,它无法完成任务
double variablename = intVariable;
会有用的 许多数据可以表示为一系列字节 Int是大多数用户在计算或处理整数时使用的默认数据类型 使用Byte的问题是编译器无法识别它进行类型转换 只要你试过
int variablename = bytevariable;
然而,它无法完成任务
double variablename = intVariable;
会有用的 字节值在JVM中仍然占用相同的空间,并且还需要显式或隐式地将其转换为int以实现实际目的,包括数组大小、索引、,等等。字节值在JVM中仍然占用相同的空间,它还需要显式或隐式地转换为int以达到实际目的,包括数组大小、索引等。我认为这是因为
映射的容量是用int
表示的。当您尝试使用字节
和整数
时,由于升级规则,该字节无论如何都会转换为整数
。默认容量用int
表示,以避免那些不必要的促销。我认为这是因为地图的容量用int
表示。当您尝试使用字节
和整数
时,由于升级规则,该字节无论如何都会转换为整数
。默认容量用int
表示,以避免那些不必要的升级。使用字节
或短
代替int
作为变量和常量是一种过早的优化,几乎没有效果
JVM的大多数算术和逻辑指令仅适用于int
、long
、float
和double
,其他数据类型必须(通常)转换为int
,以便对其执行这些指令
整数的默认数字文字类型为int
,浮点数的默认数字文字类型为double
。因此,使用byte
、short
和float
类型会导致一些微妙的编程错误,通常会降低代码的可读性
书中的一个小例子:
publicstaticvoidmain(字符串[]args){
用于(字节b=字节.MIN_值;b<字节.MAX_值;b++){
如果(b==0x90)
系统输出打印(“快乐!”);
}
}
此程序不打印Joy
,因为十六进制值0x90
隐式提升为int
,值为144
。由于Java中的byte
s是有符号的(这本身非常不方便),因此变量b
从未分配给该值(byte.MAX_value=127
),因此,该条件从未得到满足
总而言之,内存占用的减少太小(几乎没有),无法证明这种微优化的合理性。通常,不同大小的显式数字类型不是必需的,并且适合于更高级别的编程。我个人认为,字节数组是唯一可以接受较小数值类型的情况。对变量和常量使用byte
或short
而不是int
是一种过早的优化,几乎没有效果
JVM的大多数算术和逻辑指令仅适用于int
、long
、float
和double
,其他数据类型必须(通常)转换为int
,以便对其执行这些指令
整数的默认数字文字类型为int
,浮点数的默认数字文字类型为double
。因此,使用byte
、short
和float
类型会导致一些微妙的编程错误,通常会降低代码的可读性
书中的一个小例子:
publicstaticvoidmain(字符串[]args){
用于(字节b=字节.MIN_值;b<字节.MAX_值;b++){
如果(b==0x90)
系统输出打印(“快乐!”);
}
}
此程序不打印Joy
,因为十六进制值0x90
隐式提升为int
,值为144
。由于Java中的byte
s是有符号的(这本身非常不方便),因此变量b
从未分配给该值(byte.MAX_value=127
),因此,该条件从未得到满足
总而言之,内存占用的减少太小(几乎没有),无法证明这种微优化的合理性。通常,不同大小的显式数字类型不是必需的,并且适合于更高级别的编程。我个人