Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么HashMap内部工作助手变量是int,可以是字节数据类型_Java_Variables_Hashmap_Int_Byte - Fatal编程技术网

Java 为什么HashMap内部工作助手变量是int,可以是字节数据类型

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个字节(我在这里猜是这样的)。他们可以,但这将是一个微观优化,而折衷方案将是可读性和可维护性较差的代码(,任何人?

HashMap内部有自己的静态最终变量用于其工作

        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
),因此,该条件从未得到满足

总而言之,内存占用的减少太小(几乎没有),无法证明这种微优化的合理性。通常,不同大小的显式数字类型不是必需的,并且适合于更高级别的编程。我个人