valueOf方法获取的是字符串本身能转化的数值,getInteger方法获取的是系统属性对应的数值。
(这里的系统属性是指java通过system.getproperty获得的环境变量,如操作系统配置信息以及软件信息。
有关系统属性可以参考:http://blog.csdn.net/babydavic/article/details/1755718)
平常开发中,字符串转整数用valueOf方法。getInteger方法能不用则不要用。两者完全不一样。
@Test
public void Test0(){
String s = "123";
Integer getInt = Integer.getInteger(s);
Integer valueOf = Integer.valueOf(s);
System.out.println("Integer.getInteger(\""+ s + "\")=" + getInt);
System.out.println("Integer.valueOf(\""+ s + "\")=" + valueOf);
}
输出结果:
Integer.getInteger("123")=null
Integer.valueOf("123")=123
深入理解getInteger方法:获取系统属性的方法:System.getProperties()
@Test
public void Test(){
Properties prop = System.getProperties();
Enumeration keys = prop.keys();
while(keys.hasMoreElements()){
String s = keys.nextElement().toString();
Integer i = Integer.getInteger(s);
System.out.println(s + "=" + i);
}
}
输出结果:我的jdk下只有系统属性sun.arch.data.model可转换为相应的Integer对象
java.runtime.name=null
sun.boot.library.path=null
java.vm.version=null
java.vm.vendor=null
java.vendor.url=null
path.separator=null
java.vm.name=null
file.encoding.pkg=null
user.country=null
sun.java.command=null
java.home=null
...
sun.arch.data.model=64
...
普通的属性文件不能输出对应的Integer值:这里用数据库配置文件jdbc.properties做个测试
@Test
public void Test2(){
try{
BufferedReader br = new BufferedReader(new FileReader("config/jdbc.properties"));
Properties p = new Properties();
p.load(br);
Enumeration keys = p.keys();
while(keys.hasMoreElements()){
String s = keys.nextElement().toString();
Integer i = Integer.getInteger(s);
System.out.println(s + "=" + i);
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
输出结果全是null:
jdbc.maintenanceInterval=null
portNumber.base=null
jdbc.loginTimeout=null
jdbc.maxPoolSize=null
jdbc.minPoolSize=null
databaseName.base=null
uniqueResourceName.base=null
jdbc.borrowConnectionTimeout=null
jdbc.xaDataSourceClassName=null
jdbc.maxIdleTime=null
jdbc.poolSize=null
jdbc.logWriter=null
...
将普通属性添加到系统属性,则可以访问到该属性值:添加到系统属性的方法:System.setProperties(p)
@Test
public void Test3(){
try{
BufferedReader br = new BufferedReader(new FileReader("config/jdbc.properties"));
Properties p = new Properties();
p.load(br);
System.setProperties(p);
Enumeration keys = p.keys();
while(keys.hasMoreElements()){
String s = keys.nextElement().toString();
Integer i = Integer.getInteger(s);
System.out.println(s + "=" + i);
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
输出结果:根据jdbc对应的属性名打印属性值,能转化成Integer型的则输出了数值,不能转化成Integer型的则输出null
jdbc.maintenanceInterval=60
portNumber.base=5432
jdbc.loginTimeout=60
jdbc.maxPoolSize=500
jdbc.minPoolSize=5
databaseName.base=null
uniqueResourceName.base=null
jdbc.borrowConnectionTimeout=60
jdbc.xaDataSourceClassName=null
jdbc.maxIdleTime=60
jdbc.poolSize=5
jdbc.logWriter=60
...
最后:不要被两个方法的表面意思类似迷惑了,老老实实用valueOf方法吧。虽然知道了getInteger的一些用法,但是对本人目前来说,还是觉得没什么用。。。算是涨姿势吧,说不定哪天用上了。。。