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 :
    ...............
}

转载于:https://blog.51cto.com/picker/735884

解决int和Integer不能互转相关推荐

  1. int 与Integer的用法与区别

    1.int是基本类型,直接存取数值,Integer是对象,用一个引用指向这个对象. 2.java中的数据类型分为基本数据类型和复杂数据类型,int是前者,Integer是后者(也就是一个类). 3.初 ...

  2. String、int、Integer互转的常用方法

    代码 package javase.commonClass.Integer;/**String.int.Integer互转**/ public class IntegerTest04 {public ...

  3. Java int 和 Integer 互转原理

    文章目录 Java int 和 Integer 互转 Java Integer.int 与 new Integer() Integer.valueOf() new Integer() 为什么 Java ...

  4. java int == integer_java int与integer的区别

    int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型 ...

  5. 基础回顾(正则、循环、和、 int和Integer、String /StringBuffer、Array和ArrayList、值传递和引用传递、 Lamda、java8)

    1. 正则表达式 1.1 Java中是如何支持正则表达式操作的? Java中的String类提供了支持正则表达式操作的方法,包括:matches().replaceAll().replaceFirst ...

  6. java int与integer的区别

    int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型 ...

  7. 面试官:int和Integer有什么区别?为什么要有包装类?

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 重要说明:本篇为博主<面试题精选-基础篇>系列中的一篇,查看 ...

  8. int和Integer的比较

    int和Integer的比较 1 int和Integer JDK1.5引入了自动装箱与自动拆箱功能,Java可根据上下文,实现int/Integer,double/Double,boolean/Boo ...

  9. java integer == int_Java中int和Integer的区别详解

    1.Java 中的数据类型分为基本数据类型和复杂数据类型 int是前者>>integer 是后者(也就是一个类) 2.初始化时>> int i =1; Integer i= n ...

最新文章

  1. MySQL57安装与设置
  2. php禁止网页抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站 - 龙笑天下...
  3. Visual C++——加速键
  4. ironpython使用dictionary_在C#环境中动态调用IronPython脚本(一)
  5. 转:Session,有没有必要使用它?
  6. D3D 光照和材料 小样例
  7. bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
  8. properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了! - 风平浪静如码
  9. 车内看车头正不正技巧_交规理论最全技巧口诀,学会后100%过关!
  10. postsql将MULTIPOLYGON转POLYGON
  11. 威纶通触摸屏232脚位_威纶触摸屏tk6070iq232接口引脚电 – 手机爱问
  12. C语言——逻辑运算符
  13. 后台登录管理员数据表创建
  14. UMLChina公众号文章精选(20220821更新精选)
  15. 软件测试的基础知识点
  16. MA均线指标详解、价托、量托
  17. 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...
  18. Mac电脑的强大压缩工具——FastZip,加密压缩。
  19. 【Python】QQ群聊天记录提取
  20. 【转】Ubuntu18将Launcher(启动栏/任务栏)移到屏幕下方

热门文章

  1. eclipse中简单实现自己的工具类打包成jar包并在项目中使用
  2. php 冒泡排序数组,php一维二维数组键之冒泡排序
  3. android edittext不可复制_Android中使EditText只读的方法(可恢复编辑状态)
  4. 上传图片插件鼠标手cursor:pointer;不生效
  5. (二)stm32之中断配置
  6. ios category类别的使用
  7. (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL视图
  8. javascript中的小括号
  9. Android工程中追踪修改bug的总结
  10. eclipse xhtml文件 标签自动提示 问题解决