在真实应用生活中使用向下转换

时间:2013-07-16 12:22:05

标签: java downcast

我知道隐式转换是由编译器和虚拟机自动完成的,当Java不确定结果是否有效时,需要显式转换来转换数据类型。应该在基元之间或对象之间进行转换。

我的问题是:如果我的应用程序同时使用整数和长整数 - 我应该对这两种类型使用long吗?还是预测long?或者为int投票?

两种类型的长期使用会导致一些问题吗?

4 个答案:

答案 0 :(得分:3)

我可能会使用正确的数据类型进行正确的操作,long如果我需要longint如果int足以满足我的要求。 常识是认为使用long int可能会降低你的速度,但这又取决于具体的JVM实现。您必须根据要定位的范围来决定。

同样,如果程序中涉及大量的转换,那么最好选择 long这样的数据类型,它可以容纳比int更大的范围,并且可以避免使用强制转换和在该过程中丢失数据。话虽如此,long可能比int慢,尽管在现代处理器和JVM中我怀疑这可能会影响很多。

可能,开明的人可以更好地回答这个问题。

您还可以阅读一些不错的SO Q& A herehere

答案 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 typesInteger.MIN_VALUE之间并且不甜,那么请查看Integer.MAX_VALUE,投射将按预期工作。否则,请转到longBigInteger

答案 3 :(得分:0)

你真的需要更清楚你正在处理的数字范围。对于给定的输入,最好的选择是使用long。但是如果你真的需要使它成为泛型而内存不是约束,那么你可以使用BigInteger