将String类型解析为Java中可用的其他数字类型的最佳方法是什么?

时间:2011-11-09 05:32:24

标签: java

让我们考虑Java中的以下代码片段。有一些可能的方法(我知道)将String值解析为其他数值类型(假设为了简单起见,它是一个Integer,Java中的包装类型)。

package parsing;

final public class Parsing
{
    public static void main(String[] args)
    {
        String s="100";

        Integer temp=new Integer(s);
        System.out.print("\ntemp = "+temp);

        temp=Integer.parseInt(s);
        System.out.print("\ntemp = "+temp);        

        temp=Integer.valueOf(s).intValue();
        System.out.print("\ntemp = "+temp);

        temp=Integer.getInteger(s);
        System.out.print("\ntemp = "+temp);
    }    
}

在除最后一个之外的所有情况下,在将其转换为整数后返回值100。哪一个是将String值解析为Java中可用的其他数值类型的最佳方法?即使String对象 s 已包含可解析值,最后一种情况也会返回NULL。为什么呢?

8 个答案:

答案 0 :(得分:4)

调用Integer.getInteger("42")尝试获取名称为“42”的系统属性的值。除非您确实拥有具有名称的系统属性,否则它将返回null

如果您需要更多详细信息,请参阅Java 7 javadoc

是的,该方法的名称具有误导性,其效用值得怀疑。


FWIW,如果我需要Integer.parseInt(String)结果,我会使用int;如果我需要Integer.valueOf(String),我会使用Integer。如果我要求对象是 new new Integer(String)可能是共享对象,我只会使用Integer

(推理与new Integer(int)Integer.valueOf(int)相同。再次阅读javadocs以获得更完整的解释。)

答案 1 :(得分:1)

temp=Integer.parseInt(s);

与其他人不同,它只计算 int ,而不是整数。 (虽然这不是一个很大的优势)

答案 2 :(得分:1)

  

即使String对象已经包含可解析的值,最后一种情况也会返回NULL。为什么呢?

它没有做你认为它正在做的事情:

public static Integer getInteger(String nm)
  

确定具有指定名称的系统属性的整数值。

请参阅API Doc

另见相关方法的文档,他们会做不同的事情。

 new Integer(s); //you are creating new object
 parseInt(s); // parses and returns int (primitive)
 valueOf(s); //returns cached Integer object with the int value in s

所以,这取决于:如果您需要int然后parseInt(s),如果您需要Integer,那么valueOf(s)

答案 3 :(得分:1)

getInteger(String s)返回具有指定名称的系统属性的整数值。如果没有指定名称的属性,如果指定的名称为空或null,或者属性没有正确的数字格式,然后返回nullNote that这相当于getInteger(s, null)显然是not doing what you expect it to do!


现在分析剩余的方法,valueOf()结果是一个Integer对象,表示字符串指定的整数值,Integer对象等于:new Integer(Integer.parseInt(s))所以我们先排除这个。

现在是new Integer(s)方法,现在如果你想使用int值,你又需要得到intValue(),所以最后证明Integer.parseInt(s)方法更好(取决于)。

Javadoc可以根据您的需要为您提供更多详细信息。

答案 4 :(得分:1)

Integer.parseInt(s)是最好的方法。

Interger#valueOf()方法将返回等于Integer值的new Integer(Integer.parseInt(s))对象。

Integer.getInteger()甚至不是候选人。

答案 5 :(得分:1)

Integer.getInteger(String)

确定具有指定名称的系统属性的整数值。

如果没有具有指定名称的属性,如果指定的名称为空或null,或者属性没有正确的数字格式,则返回null。 换句话说,此方法返回一个等于值的Integer对象:

getInteger(nm, null)

这是你最好的explanation混乱。

已编辑:

<强> AFAIK:

  • Integer.valueOf(String)通过假设String是数字表示将String转换为数字。换一种说法。 Integer.valueOf(“100”)产生数字100。
  • Integer.getInteger(String)通过假设String是系统属性数字表示的名称将String转换为数字。换一种说法。 Integer.getInteger(“100”)可能会产生null。

答案 6 :(得分:0)

请参阅getInteger(),其中“确定具有指定名称的系统属性的整数值。”

答案 7 :(得分:0)

我更喜欢parseInt(...)

您的上一次输出为null的原因是getInteger(...)属性获取整数值。要设置属性的值,请使用选项-D。因此,如果使用命令行

java -D100=5 Test

您将无法获得null,但您将获得5。此处,选项-D将名为“100”的属性设置为 value “5”。