2009-10-08 81 views
2

在Java中,如果int足够用于某个字段,并且出于某种原因使用long,那会花费我更多的内存吗?这种类型有所不同吗?在Java中声明'long'over'int'

+8

在什么语言和在什么平台上?这是相当含糊的,答案将会是编译器和平台相关的(如果你问的是我的想法)。 – 2009-10-08 18:08:59

+0

对不起,我忘了添加该语言。 Java的。 – DragonBorn 2009-10-08 18:18:17

+0

虽然这是一个非常模糊的问题。不知道什么平台和语言,很难回答。大部分时间,内存中的小差异被更快的CPU操作所抵消。 – 2009-10-08 18:19:04

回答

2

int是32位和long是64位。 long需要两倍的内存(这对于大多数应用来说是相当微不足道的)。

+3

在MS C/C++编译器,长和INT是相同的尺寸。 – Michael 2009-10-08 18:10:16

+2

这是语言编译器和平台相关的。不过,对于java和C#,它总是32和64。 – 2009-10-08 18:11:39

+3

这个答案对于Java来说是正确的。 – mob 2009-10-08 18:22:01

2

Java中的长度是64位,int是32位,所以显然longs使用更多内存(8字节而不是4字节)。

7

在Java中,是的,long是8个字节宽,整数是4个字节宽。 This Java tutorial goes over the primitive data types.如果您将分配数量乘以一定数量(例如,如果您分配了500万个这些变量),则差异将变得可以忽略不计。然而,对于平均使用量来说,这并不重要。

(你已经在使用Java,内存的那种所有的地方的反正。)

在当地语言,有一个性能的考虑;一个32位值可以保存在一个32位架构上的单个寄存器中,但不能保存在64位值上;在64位体系结构上,显然它可以。我不确定Java在其本地整数上做了什么样的优化,但是在运行时也可能是这样。尽管如此,还需要考虑对齐问题 - 使用短裤和字节可以更多地看到这一点。

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

+1

我很确定速度的东西同样适用于java,因为它对本地语言也适用。 – rmeador 2009-10-08 18:31:56

+0

我也是。只是不能确定。 – 2009-10-08 18:55:15

3

假设您从以前的问题中想要在Java范围内提出这个问题,int数据类型是四个字节,而长数据类型是八个字节。

但是,尺寸差异实际上是否意味着内存使用的差异取决于情况。

如果它是一个局部变量,它将被分配到堆栈上。由于已经分配了堆栈,因此使用更多的堆栈空间不会使用更多的内存,当然,前提是您不会耗尽堆栈。

如果它是一个类的成员,它将取决于成员如何对齐。有时候,成员并不是紧凑地堆放在内存中,而是使用填充来使一些成员从一个偶数地址开始。例如,如果你在一个类中有一个字节和一个int,那么它们之间可能会有三个填充字节,这样int就可以在下一个可以被4整除的地址处开始。

1

ifwdev猜对了。 Java将int定义为32位有符号整数,将long定义为64位有符号整数。如果你声明一个变量为long,那么是的,它将需要两倍于同一个变量声明为int的变量。通常,int通常是“默认”数字类型,即使对于可能包含在较小类型中的值(如short)也是如此。除非您有特殊原因要求值大于2^31-1,否则请使用int

0

如果你知道你的数据将适合在一个特定的数据类型(比如用C short int),唯一的理由使用一个更大的是性能吧?如果这是您的目标,无论您的性能收益多么微不足道,作为一般的经验法则,您希望使用与体系结构大小相匹配的大小(对于常规的32位目标系统,您可以使用32位的系统,位类型)。

如果定位到多个系统,可以使用相匹配的最常用的一个数据类型。

1

......会花费我更多的记忆吗?

您将使用两倍的内存

担心,如果你正在使用更多的内存或不前,你就应该剖析。

要使用使用1兆字节额外RAM的长,而不是诠释你必须声明:262,144长变量(或程序中的间接使用它们)。

因此,如果由于某种原因,你声明一个或两个长变量时,应使用INT的,你将使用4或8个字节以上的内存。没有太多的担心(我的意思是,在你的应用程序有可能是最糟糕的内存问题),从这里Java Tutorial采取

是INT的定义和长

INT:int数据类型是一个32位有符号的二进制补码整数。它的最小值为-2,147,483,648,最大值为2,147,483,647(含)。对于整数值,这种数据类型通常是默认选择,除非有一个原因(如上所述)选择别的。这种数据类型对于您的程序将使用的数字来说很可能足够大,但是如果您需要更宽范围的值,请使用long。

long:长数据类型是一个64位有符号二进制补码整数。其最低值为-9,223,372,036,854,775,808,最高值为9,223,372,036,854,775,807(含)。当您需要的值范围比int提供的范围宽时,使用此数据类型。

但要记住:根据高德纳"Premature optimization is the root of all evil"(根据我的复制/粘贴是一切罪恶的根源虽然)