哪个更快,int到String或String到int?

时间:2011-07-27 12:44:13

标签: java android

这似乎是一个相当基本的问题,我提前道歉。

我正在编写一个使用一组预定义数字的Android应用。目前我正在使用int值,但在某些时候我可能还需要使用floatdouble值。

这些数字用于两件事。首先,我需要向用户显示它们,我需要String(我正在创建自定义View并在String上绘制Canvas)。其次,我需要在一种计算器中使用它们,显然它们必须是int(或float / double)。

由于数字是相同的,无论它们是String还是int,我只想存储一次(如果我需要更改任何一个,这也会减少错误;我' ll只需要在一个地方更改它们。)

我的问题是:我应该将它们存储为String还是int?将int写为String或从int解析String是否更快?我的直觉告诉我解析需要更多时间/资源,所以我应该将它们存储为int s。我是对的吗?

8 个答案:

答案 0 :(得分:6)

实际上,你的直觉可能错了(我强调可能,请参阅下面有关测量的评论)。要将字符串转换为整数,需要进行一系列乘法/加法运算。要将整数转换为字符串,需要除法/模数。很可能前者比后者更快。

但是我想指出你应该测量,而不是猜测!依赖于错误假设的算法尸体遍布着。

我还想指出,除非你的计算器每秒钟进行巨大的计算次数(而且我说数百万甚至数十亿),差别几乎可以肯定无关紧要。

在绝大多数用户交互式应用程序中,99%的计算机时间都花在等待用户做某事上。

我的建议是做一些让你的生活变得更容易作为开发人员的事情,并担心如果(并且只有)它成为一个问题。并且,为了澄清,我建议将它们存储在 native 形式(而不是字符串)中对于计算器来说是最简单的。

答案 1 :(得分:4)

我对1 000 000大小的int和String数组进行了测试。我只定时解析,结果说:

  • 案例1,从int到String:1 000 000,平均为344ms
  • 案例2,从String到int:1 000 000,平均140ms

结论,你胆子错了:)!

我和其他人一起说,这不会让你的申请变慢。更好地集中精力使其更简单,更安全。

答案 2 :(得分:2)

我会说这不是真的相关。更重要的是类型安全:因为您有数字int(或floatdouble)会强制您使用数字而不存储“任意”数据({{1}在某种程度上允许)。

答案 3 :(得分:1)

最好是做一个台架测试。写两个循环

  • 将100000单位从数字转换为字符串
  • 的单位
  • 将100000个单位从String转换为数字
  • 的单词

并衡量在每次循环之前和之后获取System.currentTimeMillis()所经过的时间。

但就个人而言,如果我需要对这些数字进行计算,我会将它们存储为原始格式(int或float),我只会将它们转换为String进行显示。与执行速度问题相比,这更像是设计和可维护性的问题。专注于执行速度有时会适得其反:为了获得几μA,没有人会注意到不值得牺牲设计和稳健性(当然,当这是一个节省大量CPU时间的问题时,可能必须做出一些妥协)。 This reading may interest you

答案 4 :(得分:1)

使用计算器的人不会注意到性能差异,但正如其他人所说的那样。使用字符串作为内部表示是一个坏主意,因为在这种情况下您不会获得类型安全性。

如果您决定使用字符串,您很可能会在以后遇到维护问题。

答案 5 :(得分:0)

更好的设计实践是让用户从基础数据中获取显示的视图,而不是相反 - 在某些时候,您可能决定使用自己的绘图函数或固定图像渲染计算器,并且你的数据作为字符串会很痛苦。

话虽如此,使用现代硬件时,这些操作都不是特别耗时。

答案 6 :(得分:0)

解析是一件很慢的事情,打印数字不是。数字的内部表示允许您计算,这可能与您的数字有关。将数字存储为数字(整数,浮点数,小数数)也比字符串表示占用更少的空间,因此......您可能希望将它们存储为整数,浮点数或其他任何值。

答案 7 :(得分:0)

您正在为移动设备编写应用程序,其中内存消耗是一个巨大的交易。

存储int很便宜,存储String的费用很高。转到int

编辑:更多解释。存储int bteween -2^312^31-1的费用为32位。无论数量是多少。将其存储在String中,其基数为10的每位数为16位。