[总结]Integer.getInteger和Integer.valueOf的区别

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的一些用法,但是对本人目前来说,还是觉得没什么用。。。算是涨姿势吧,说不定哪天用上了。。。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值