我知道隐式转换是由编译器和虚拟机自动完成的,当Java不确定结果是否有效时,需要显式转换来转换数据类型。应该在基元之间或对象之间进行转换。
我的问题是:如果我的应用程序同时使用整数和长整数 - 我应该对这两种类型使用long
吗?还是预测long
?或者为int
投票?
两种类型的长期使用会导致一些问题吗?
答案 0 :(得分:3)
我可能会使用正确的数据类型进行正确的操作,long
如果我需要long
,int
如果int
足以满足我的要求。 常识是认为使用long
int
可能会降低你的速度,但这又取决于具体的JVM实现。您必须根据要定位的范围来决定。
同样,如果程序中涉及大量的转换,那么最好选择 long
这样的数据类型,它可以容纳比int
更大的范围,并且可以避免使用强制转换和在该过程中丢失数据。话虽如此,long
可能比int
慢,尽管在现代处理器和JVM中我怀疑这可能会影响很多。
可能,开明的人可以更好地回答这个问题。
答案 1 :(得分:3)
我认为您应该使用涵盖所有值的数据类型,因此我会将long
用于所有内容,因为它可以简化代码并避免潜在的风险转换。
long
投射到int
可能会导致您丢失数据,因为long
大于int
(因此数据会在广播中被截断)。int
投射到long
几乎(请参阅Colin Morelli对此的评论)与从一开始使用long
一样,您可以避免玩杂耍有2种类型。这个演员也没有意义,因为你实际上没有占用内存(除非你使用int
并且一个方法显然需要long
作为参数,那么你显然别无选择但是演员)。我使用long
看到的缺点是:
long
将所需内存加倍,而不是int
(仍然考虑到下面的Colin Morelli的评论)。long
可能会降低性能(如上所述,但我不确定)答案 2 :(得分:0)
取决于您的日期范围。如果您知道自己的数字介于The Java Tutorials: Primitive Data types和Integer.MIN_VALUE之间并且不甜,那么请查看Integer.MAX_VALUE,投射将按预期工作。否则,请转到long
或BigInteger。
答案 3 :(得分:0)
你真的需要更清楚你正在处理的数字范围。对于给定的输入,最好的选择是使用long
。但是如果你真的需要使它成为泛型而内存不是约束,那么你可以使用BigInteger
。