为什么我在scala中比较Long和Int得到不同的值

时间:2016-12-09 10:21:13

标签: scala

def computeInt(string: String): Int ={
  if(string.isEmpty) 1
  else
    string.head.toInt*computeInt(string.drop(1))
}
def computeLong(string: String): Long={
  if(string.isEmpty) 1
  else
    string.head.toInt*computeLong(string.drop(1))
}

问题: computeInt(“你好”)//我得到了正确的“825152896”

computeLong(“你好”)//我得错了答案“9415087488”

这真让我困惑。

1 个答案:

答案 0 :(得分:9)

我不确定为什么你认为computeInt会返回正确的答案,而事实上computeLong更准确。 让我们来看看你的情况:

H: 72
e: 101
l: 108
l: 108
o: 111

在这种情况下你应该:

value = 72*101*108*108*101 = 9,415,087,488

大于Int.MAX_VALUE,这意味着您在computeInt看到的结果实际上是溢出。