Java中的字节和短点(我已经看过其他问题)

|| 我的问题是: 如果我从Java反汇编中得到正确的答案,当我使用
byte a=3,b=5;
System.out.println(a+b);
实际上将使用int而不是byte。同样,所有本地内存插槽也都是4B,就像堆栈插槽一样。我意识到分配字节数组可能会更有效,但是使用单个字节值最终会导致效率低下吗? (简称同点)     
已邀请:
性能调整的首要规则应该是编写简单,清晰的代码。 在此示例中,没有性能差异,即使有println()花费10,000倍以上的时间来做任何差异概念。 程序在字节码中的显示方式与在本机代码中的显示方式不同。 在JVM中,并非所有插槽都是4字节。例如在64位计算机上的引用可以是8个字节,但仍使用一个\“ slot \” 您的计算机没有插槽。它确实具有通常为32位或64位的寄存器。 在您的示例中,使用的字节操作与int操作一样有效,并且可以产生不同的结果,因此仍然需要它们。 注意:具有“ 1”或“ 2”字段的对象可以小于具有“ 3”字段的对象。 在此示例中,JVM可以一次计算
c
,因此不需要
a
b
    
+
是整数运算。这就是为什么
byte c = a+b; // compile error
你应该使用
int c = a + b 
要么
byte c = (byte)(a+b);
我的建议是使用
int
以便每次都不要投射。如果您始终要处理
byte
,请使用字节,否则请使用
int
    
重要的是要认识到,在Java中,
byte
和ѭ2existence的存在主要不是具有较小范围的整数数据类型。在几乎所有存储(足够小的)数值的情况下,即使有效范围仅为0-100,也会使用
int
。 当某些外部因素将要处理的数据限制在这些范围内时,使用1ѭ和
short
。它们只是为了简化与此类系统的交互而存在。 例如,如今文件系统存储字节流。您可以对所有这些读/写操作使用
int
,但是使用
byte
数据类型可以简化该操作并明确区分。     
byte a=3,b=5;
声明为
final byte a=3,b=5;
,以便执行该语句
byte c = a+b;
时,将花费
byte
而不是
int
。     
定义低效率。 是的,内存占用空间似乎效率低下,但是请记住,当今大多数处理器都是32位(甚至64位)的。仅在8位中存储一个字节将要求处理器获得32位的地址空间,并对其进行移位和清除,以使必要的8位位于正确的位置。     

要回复问题请先登录注册