解决int和Integer不能互转

java.lang.Integer是一个类,它集成了java.lang.Number,它在某对象中打包了原始类型为int的值。Integer类型的对象包括了int型的单个域。由于java.lang.Integer是一个类,因此它提供了一些方法来对其对象进行操作。

 

 

Java 5 引入了自动装箱和自动拆箱的概念。使得开发者不需要注意基本类型如:int long等基本类型和对应的对象类型:Integer Long等之间的转换问题。但是也稍微带来了一点点需要注意的东西。

使用JDK5.0版本以上可以自动拆箱,但是在JDK5.0以下环境编写的一些.java文件,用到JDK5.0以上环境后可能就会出现转换出错。

使用类型强制转换的方法换成这样即可:

Integer转成int可以用:Integer.parseInt();
int转成Integer可以用:new Integer();

举例:
int num = (int)Integer.valueOf(request.getParameter("hiddenNum"));
Integer integerid=new Integer(request.getParameter("stringid"));
建议:Integer integerid=Integer.valueOf(request.getParameter("stringid"));

如果前例中request.getParameter("hiddenNum")取得的值不是数字,那会出现NumberFormatException异常错误!

 

 

因为数据不同类型的长度不同,所以请慎用new Integer()、new Long()……


1、慎用 Integer Long Double 等对象请慎用== ,最好转换成基本类型进行对比。


2、尽量少用new Long(x) new Integer(x) 等,尽量使用Integer.valueOf(x) Long.valueOf(x),这样可以避免过多的new对象,稍微提高一点性能。

看看这两个语句
Integer a=new Integer(1)
Integer a=Integer.valueOf(1);
两个都是得到一个Integer对象,但是Integer.valueOf的效率高。为什么呢?因为Integer.valueOf用到了缓存。看看Integer.valueOf的代码:
Java代码 
<span style="font-size: small;">    public static Integer valueOf(int i) { 
    final int offset = 128; 
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset]; 
    } 
        return new Integer(i); 
    }</span> 
 当传入的整数i:-128<i<=127时,从缓存里取出整数对应的Integer对象,否则创建一个Integer对象。基本上平时的程序中,这个范围的整数是最常用的。

  IntegerCache是什么?看看源码
Java代码 
<span style="font-size: small;">    private static class IntegerCache { 
    private IntegerCache(){} 
 
    static final Integer cache[] = new Integer[-(-128) + 127 + 1]; 
 
    static { 
        for(int i = 0; i < cache.length; i++) 
        cache[i] = new Integer(i - 128); 
    } 
    }</span> 
 可见,IntegerCache预先创建了这些Integer对象。
所以,要注意的是,new Integer返回的永远是不同的对象,但是当整数范围在-128<i<=127时,Integer.valueOf返回的是同一个对象。看看下面代码:
Java代码 
<span style="font-size: small;">        Integer a=new Integer(1); 
        Integer b=new Integer(1); 
        
        //整数范围在-128到127之间,返回的是同一个对象 
        Integer c=Integer.valueOf(1); 
        Integer d=Integer.valueOf(1); 
        
        //返回的不是同一个对象 
        Integer e=Integer.valueOf(200); 
        Integer f=Integer.valueOf(200); 
        
        System.out.println(a==b); 
        System.out.println(c==d); 
        System.out.println(e==f);</span> 
输出为
false
true
false
结论:在没有对Integer创建有特殊要求时,比如纯数字计算或比较,最好用Integer.valueOf。

 

 

而int只是java缺省的8个数据类型之一。
java.lang.Integer的方法有很多,比如:
equals(object)——将对象与指定对象比较;
floatValue()——以float类型返回该Integer的值;
intValue()——以int类型返回该Integer的值;
longValue()——以long型返回该Integer的值;
toString()——返回一个表示Integer值的String对象;
parseInt(String)——将String作为一个带有符号的十进制整数来分析;
……
java的switch语句要求参数是一个int型的,而有的时候我们从数据库里得到值,返回是Integer的对象,比如设定的字段是int的用户类型或年龄之类,这时用该POJO类的对象调用getter,如:object1.getUserType();然后再使用intValue()就可转化成int使用了。
StoUser su = (StoUser) it.next();
int a = (su.getUserType()).intValue();
switch(a)
{
  case 0 :
      ...............
}

你可能感兴趣的:(职场,休闲,jdk5.0,自动拆箱,int和Integer转换)