在字符串中存储数字。是资源浪费吗?

时间:2018-01-30 14:57:01

标签: java types

假设我有一个String类型的ArrayList,只存储数字。我在浪费资源吗? String大于int还是short?我无法在任何地方找到字符串的大小,并想出了这个引起我兴趣的愚蠢问题。

是否是存储5位数字的最有效数据类型?

3 个答案:

答案 0 :(得分:3)

String对象的大小非常灵活。字符串中的每个字符都需要一个或两个字节,因此存储一个5位数字至少需要5个字节。此外,String对象还有一些开销。另一方面,int是32位,只有4个字节。

更重要的一个问题是难以使用存储为字符串的数字执行算术运算。您必须实现添加,减去,乘法和除法的方法。使用int,您已内置运算符。

答案 1 :(得分:2)

在Java 8中,String只是char[]的实习生,其中包含String中使用的所有字符。在这种情况下,具有32位的int大于具有16位的1 char

在Java 9中,byte[]有一个char[]而不是String

现在,您可以找出哪种类型更适合您使用。

答案 2 :(得分:2)

String和Integer是对象,int是原始类型。对象使用了更多的内存,而原始类型则没有。 例如,如果您有一个基本类型:

int i = 5; 

例如在存储器地址10中,将保存值5并且我知道地址10

但对象为:

Integer i = new Integer(5):

值5将保存在例如地址2中,地址10(i变量)将引用地址2,这将占用更多内存。创建新对象时,会创建一个由一系列连续块组成的复合内存块,每个实例变量对应一个块,这会占用更多内存。

String是一个对象,一个特殊对象,但仍然是一个对象。它很特别,因为例如它不需要new