在Java中,如果int
足够用于某个字段,并且出于某种原因使用long
,那会花费我更多的内存吗?这种类型有所不同吗?在Java中声明'long'over'int'
回答
Java中的长度是64位,int是32位,所以显然longs使用更多内存(8字节而不是4字节)。
在Java中,是的,long是8个字节宽,整数是4个字节宽。 This Java tutorial goes over the primitive data types.如果您将分配数量乘以一定数量(例如,如果您分配了500万个这些变量),则差异将变得可以忽略不计。然而,对于平均使用量来说,这并不重要。
(你已经在使用Java,内存的那种所有的地方的反正。)
在当地语言,有一个性能的考虑;一个32位值可以保存在一个32位架构上的单个寄存器中,但不能保存在64位值上;在64位体系结构上,显然它可以。我不确定Java在其本地整数上做了什么样的优化,但是在运行时也可能是这样。尽管如此,还需要考虑对齐问题 - 使用短裤和字节可以更多地看到这一点。
最佳做法是使用您需要的类型。如果该值永远不会超过2^31,请不要使用很长时间。
我很确定速度的东西同样适用于java,因为它对本地语言也适用。 – rmeador 2009-10-08 18:31:56
我也是。只是不能确定。 – 2009-10-08 18:55:15
假设您从以前的问题中想要在Java范围内提出这个问题,int数据类型是四个字节,而长数据类型是八个字节。
但是,尺寸差异实际上是否意味着内存使用的差异取决于情况。
如果它是一个局部变量,它将被分配到堆栈上。由于已经分配了堆栈,因此使用更多的堆栈空间不会使用更多的内存,当然,前提是您不会耗尽堆栈。
如果它是一个类的成员,它将取决于成员如何对齐。有时候,成员并不是紧凑地堆放在内存中,而是使用填充来使一些成员从一个偶数地址开始。例如,如果你在一个类中有一个字节和一个int,那么它们之间可能会有三个填充字节,这样int就可以在下一个可以被4整除的地址处开始。
ifwdev猜对了。 Java将int
定义为32位有符号整数,将long
定义为64位有符号整数。如果你声明一个变量为long
,那么是的,它将需要两倍于同一个变量声明为int
的变量。通常,int
通常是“默认”数字类型,即使对于可能包含在较小类型中的值(如short
)也是如此。除非您有特殊原因要求值大于2^31-1
,否则请使用int
。
如果你知道你的数据将适合在一个特定的数据类型(比如用C short int
),唯一的理由使用一个更大的是性能吧?如果这是您的目标,无论您的性能收益多么微不足道,作为一般的经验法则,您希望使用与体系结构大小相匹配的大小(对于常规的32位目标系统,您可以使用32位的系统,位类型)。
如果定位到多个系统,可以使用相匹配的最常用的一个数据类型。
......会花费我更多的记忆吗?
您将使用两倍的内存
担心,如果你正在使用更多的内存或不前,你就应该剖析。
要使用使用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"(根据我的复制/粘贴是一切罪恶的根源虽然)
- 1. 在Java中声明集合
- 2. 在java中声明数组
- 3. java stringbuffer声明
- 4. Java ArrayList声明
- 5. Java类声明
- 6. Java IF声明
- 7. Java声明
- 8. Java String声明
- 9. “When”声明与Java“switch”声明
- 10. 如何声明在Java
- 11. Palindromes在一个声明:Java
- 12. Java中的更新声明
- 13. Java类型声明
- 14. Java声明变量
- 15. Int Def声明Java
- 16. Java - 参数声明
- 17. Java变量声明
- 18. Java界面声明
- 19. java bufferedreader,声明readline
- 20. 如果声明JAVA
- 21. java变量声明
- 22. 声明和初始化在java中
- 23. 在Java中声明双精度
- 24. 方法声明和在java中定义
- 25. 在Java中声明列表的容量
- 26. 在Java中声明同步的顺序
- 27. 如何在Java中声明Ropes?
- 28. 在java中声明关键字
- 29. 在Java中声明异常,如何?
- 30. 数组声明错误在Java中
在什么语言和在什么平台上?这是相当含糊的,答案将会是编译器和平台相关的(如果你问的是我的想法)。 – 2009-10-08 18:08:59
对不起,我忘了添加该语言。 Java的。 – DragonBorn 2009-10-08 18:18:17
虽然这是一个非常模糊的问题。不知道什么平台和语言,很难回答。大部分时间,内存中的小差异被更快的CPU操作所抵消。 – 2009-10-08 18:19:04