让我们考虑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。为什么呢?
答案 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,或者属性没有正确的数字格式,然后返回null
。 Note 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)
确定具有指定名称的系统属性的整数值。
如果没有具有指定名称的属性,如果指定的名称为空或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”。