Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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 宣布';长';超过';int';在爪哇_Java - Fatal编程技术网

Java 宣布';长';超过';int';在爪哇

Java 宣布';长';超过';int';在爪哇,java,Java,在Java中,如果int对于一个字段来说足够了,并且如果出于某种原因使用long,这会占用我更多的内存吗?类型不同吗?int是32位,而long是64位long占用的内存是原来的两倍(对于大多数应用程序来说,这是微不足道的) 在Java中,long是64位的,int是32位的,因此显然long使用了更多的内存(8字节而不是4字节)。在Java中,long是8字节宽,整数是4字节宽。如果你将分配的数量乘以一定的数量(比如说,如果你分配了500万个这些变量),那么差异将变得可以忽略不计。然而,对于平

在Java中,如果
int
对于一个字段来说足够了,并且如果出于某种原因使用
long
,这会占用我更多的内存吗?类型不同吗?

int
是32位,而
long
是64位
long
占用的内存是原来的两倍(对于大多数应用程序来说,这是微不足道的)

在Java中,long是64位的,int是32位的,因此显然long使用了更多的内存(8字节而不是4字节)。在Java中,long是8字节宽,整数是4字节宽。如果你将分配的数量乘以一定的数量(比如说,如果你分配了500万个这些变量),那么差异将变得可以忽略不计。然而,对于平均使用率来说,这并不重要

(你已经在使用Java了,不管怎么说,内存到处都是。)

在母语中,需要考虑性能;32位值可以保存在32位体系结构的单个寄存器中,但不能保存在64位值中;显然,在64位体系结构上,它可以。我不确定Java对其本机整数做了什么样的优化,但在其运行时也可能是这样。还有一些对齐问题需要担心——不过,在使用短字符和字节时,您会看到更多这方面的问题


最佳做法是使用您需要的类型。如果该值永远不会超过2^31,则不要使用长的。

根据前面的问题,假设您想在Java范围内问这个问题,int数据类型为4字节,long数据类型为8字节

然而,大小的差异是否意味着内存使用的差异取决于具体情况

如果是局部变量,则在堆栈上分配。由于堆栈已经分配,使用更多的堆栈空间不会使用更多的内存,当然前提是不耗尽堆栈


如果它是类的成员,则取决于成员的对齐方式。有时,内存中的成员并没有紧凑地堆叠,但使用了填充,以便某些成员从偶数地址开始。例如,如果一个类中有一个字节和一个int,那么它们之间可能会有三个字节的填充,以便int从下一个可被4整除的地址开始。

ifwdev猜对了。Java将
int
定义为32位有符号整数,
long
定义为64位有符号整数。如果将变量声明为
long
,那么是的,它将占用与声明为
int
的同一变量两倍的内存。一般来说,
int
通常是“默认”数字类型,即使对于可以包含在较小类型(如
short
)中的值也是如此。除非您有特定的理由要求值大于
2^31-1
,否则请使用
int
如果您知道您的数据将适合特定的数据类型(例如C中的
short int int
),使用更大的值的唯一理由是性能对吗?如果这是您的目标,不管您的性能增益有多小,一般来说,您希望使用与架构大小匹配的大小(因此对于普通32位目标系统,您将使用32位类型)

如果针对多个系统,则可以使用与最常用的数据类型匹配的数据类型

…那会让我损失更多的记忆吗

您将使用两倍的内存

在担心是否使用了更多内存之前,应该先分析一下

要使用long而不是int来使用额外的内存1MB,您必须声明:262144long变量(或在程序中间接使用它们)

因此,如果出于某种原因,在应该使用int时声明一个或两个长变量,那么将多使用4或8字节的内存。不用太担心(我的意思是,你的应用程序中可能存在最严重的内存问题)

这是int和long的定义

int:int数据类型是一个32位有符号2的补码整数。它的最小值为-2147483648,最大值为2147483647(含)。对于整数值,此数据类型通常是默认选择,除非有理由(如上所述)选择其他数据类型。此数据类型很可能足够大,足以容纳程序将使用的数字,但如果需要更大范围的值,请使用long

long:long数据类型是一个64位有符号2的补码整数。其最小值为-9223372036854775808,最大值为9223372036854775807(含)。当需要比int提供的值更宽的值范围时,请使用此数据类型


但请记住:根据Donald Knuth的说法(我认为复制/粘贴是万恶之源)

用什么语言,在什么平台上?这是相当模糊的,答案将取决于编译器和平台(如果你问我认为你是什么)。对不起,我忘了添加语言。这是一个非常模糊的问题。如果不知道平台和语言,很难回答。在大多数情况下,内存中的微小差异会被更快的CPU操作所抵消。另外值得注意的是,由于long在Java中是64位的,在32位机器上,它将被分配到两个操作中——可能是感兴趣的,也可能不是在MS C/C++编译器中,long和int的大小相同。这取决于语言编译器和平台。java和C都将始终是32和64。是的,我删除了我的-1和以前的注释。int是32位,long是64位,但这并不一定意味着由于对齐和填充问题,long占用的内存是其他语言的两倍。我很确定,速度的问题同样适用于java,就像它适用于本地语言一样。我也是。只是不确定而已。