3

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

我的问题是:如果我的应用程序同时使用整数和长整数 - 我应该同时使用long这两种类型吗?还是垂头丧气long?或铸造int

两种类型都使用 long 会导致一些问题吗?

4

4 回答 4

3

如果需要,我可能会为正确的操作使用正确的数据类型,如果long我的要求足够的话。常识是认为使用for可能会减慢您的速度,但这又取决于特定的 JVM 实现。您必须根据您要定位的范围来决定。longintintlongint

同样,如果您的程序中涉及大量转换,那么最好选择一种long可以容纳更大范围的数据类型,而不是int在该过程中避免转换和数据丢失。话虽如此,long可能会比int在现代处理器和 JVM 中慢,但我怀疑这可能会影响很大。

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

您还可以在此处此处阅读一些不错的 SO Q&A 。

于 2013-07-16T12:28:07.140 回答
3

我认为您应该使用涵盖所有值的数据类型,所以我会使用long所有内容,因为它简化了代码并避免了潜在的风险转换。

  • 转换 from longtoint会使您丢失数据,因为 along大于 an int(因此数据在转换中被截断)。
  • 转换 from inttolong几乎(参见下面Colin Morelli 对此的评论)与long从头开始使用相同,并且避免使用 2 种类型。此外,这种强制转换没有任何意义,因为您实际上是在毫无意义地占用内存(除非您使用intand 方法明确需要 along作为参数,那么您显然别无选择,只能强制转换)。

我看到使用的缺点long是:

  • long将所需的内存加倍而不是int(仍然考虑到 Colin Morelli 在下面的评论)。
  • long 可能会产生较慢的性能(如上所述,但我不确定)
于 2013-07-16T12:28:37.207 回答
0

这取决于您的日期范围。如果您知道您的数字将介于Integer.MIN_VALUEInteger.MAX_VALUE之间,请查看The Java Tutorials: Primitive Data types。否则,选择或BigIntegerlong

于 2013-07-16T12:35:41.683 回答
0

你真的需要更清楚你正在处理的数字范围。那么对于给定的输入,最好的选择是使用long. 但是如果你真的需要让它通用并且内存不是一个限制,那么你可以使用BigInteger.

于 2013-07-16T12:44:05.983 回答