在java中将字符串转换为整数的最有效方法
2022-09-01 13:34:57
将 String 转换为 Integer 对象的方法有很多种。这是以下最有效的:
Integer.valueOf()
Integer.parseInt()
org.apache.commons.beanutils.converters.IntegerConverter
我的用例需要创建包装器整数对象...意思是没有原始的int...转换后的数据用于只读。
将 String 转换为 Integer 对象的方法有很多种。这是以下最有效的:
Integer.valueOf()
Integer.parseInt()
org.apache.commons.beanutils.converters.IntegerConverter
我的用例需要创建包装器整数对象...意思是没有原始的int...转换后的数据用于只读。
如果您关心的是效率,那么创建 Integer 对象比解析它要昂贵得多。如果你必须创建一个 Integer 对象,我不会太担心它是如何解析的。
注意:例如,Java 6u14 允许您使用命令行选项 -Djava.lang.Integer.IntegerCache.high=1024 来增加 Integer 池的大小。
注意2:如果您正在读取原始数据,例如从文件或网络读取字节,则将这些字节转换为字符串也相对昂贵。如果您要编写自定义解析器,我建议绕过与字符串对话的步骤并解析原始源数据。
注意 3:如果您正在创建一个 Integer,以便可以将其放入集合中,则可以通过使用 GNU Trove (trove4j) 来避免这种情况,它允许您将基元存储在集合中,从而允许您删除 Integer 创建。
理想情况下,为了获得最佳性能,您希望避免创建任何对象。
最好的办法是使用 Integer.parseInt。这将返回一个整数,但可以自动装箱为整数。这比 valueOf 稍快,因为当您的数字介于 -128 和 127 之间时,它将使用 Integer 缓存,而不会创建新对象。最慢的是Apache方法。
private String data = "99";
public void testParseInt() throws Exception {
long start = System.currentTimeMillis();
long count = 0;
for (int i = 0; i < 100000000; i++) {
Integer o = Integer.parseInt(data);
count += o.hashCode();
}
long diff = System.currentTimeMillis() - start;
System.out.println("parseInt completed in " + diff + "ms");
assert 9900000000L == count;
}
public void testValueOf() throws Exception {
long start = System.currentTimeMillis();
long count = 0;
for (int i = 0; i < 100000000; i++) {
Integer o = Integer.valueOf(data);
count += o.hashCode();
}
long diff = System.currentTimeMillis() - start;
System.out.println("valueOf completed in " + diff + "ms");
assert 9900000000L == count;
}
public void testIntegerConverter() throws Exception {
long start = System.currentTimeMillis();
IntegerConverter c = new IntegerConverter();
long count = 0;
for (int i = 0; i < 100000000; i++) {
Integer o = (Integer) c.convert(Integer.class, data);
count += o.hashCode();
}
long diff = System.currentTimeMillis() - start;
System.out.println("IntegerConverter completed in " + diff + "ms");
assert 9900000000L == count;
}
parseInt completed in 5906ms
valueOf completed in 7047ms
IntegerConverter completed in 7906ms