java-String与Integer的相互转化,区分Integer.getInteger和Integer.valueOf

一、Integer转String

//方法一:Integer类的静态方法toString()
Integer a = 123;
String str = Integer.toString(a)
 
//方法二:Integer类的成员方法toString()
Integer a = 123;
String str = a.toString();
 
//方法三:String类的静态方法valueOf()
Integer a = 123;
String str = String.valueOf(a);

二、String转Integer

String转化为Integer时,一定要对String进行非空判断,防止空指针异常

String str = "123";
if(str!=null){
     Integer i = Integer.valueOf(str);
}

详细实现可以查看Integer类的源码。


在应用过程中,Integer类有两个看起来很类似的静态方法,一个是Integer.getInteger(String),另外一个是Integer.valueOf(String)。如果只看方法名称的话,很不容易将这两个方法的功能区分开来。

Java文档中给出说明:

一、Integer.getInteger(String)的功能是根据指定的名称得到系统属性的整数值。第一个参数将被认为是系统属性的名称。系统属性可以通过 System.getProperty(java.lang.String)方法访问得到。属性值字符串将被解释成一个整数,并且以表示这个值的Integer对象形式返回。可能出现的数字格式的详细说明可以在 getProperty 的定义说明里找到。

二、Integer.valueOf(String)的功能是获取给定的字符串所代表的整数。

//Integer.valueOf(String)方法假设String参数表达的是一个数值
//会把该数值String转化成Integer。也就是说, 
Integer.valueOf("123") 
//得到一个Integer对象,其值是123。


//Integer.getInteger(String)方法假设String参数是一个系统属性数值的名称
//会读取该系统属性,然后把系统属性的值转换成一个数字。
Integer.getInteger("123") 
//应该是得到 null(假设没有名为12345的系统属性)。

虽然这两个方法的功能是不一样的,但是从方法的名称上并没有明显的区分开来,常常容易让人混淆。有很多bug就是因为想使用valueOf的功能但是错误的使用了getInteger方法而导致的。

我也在这个过程中出现了这个问题, 记录一下。

你可能感兴趣的:(Java)