• int与Integer的爱恨情仇


    int作为java中元老级的数据类型,可谓无处不在,自从jdk5诞生了Integer,从此不在孤单。

    为什么要设计Integer呢?它与int有什么区别?

    一、Integer是int的包装类型,是引用类型,int是值类型。

       衍生出来的特点就是:

       (1)Integer比较时比较地址,int比较时比较值,Integer与int比较又如何呢?留个疑问,下面再论。

       (2)以对象的属性存在时,Integer初始默认值为null,int为0;在方法作用域内,变量是要手动进行初始化滴,若只声明,在后面使用的时候编译器是通不过的。

    二、出于数据转换的考虑

       Integer提供了两种方法,parseInt和valueOf,看下面:

       String s = "1"

       int a = Integer.parseInt(s)

       Integer b = Integer.valueOf(s)

       Integer c = Integer.valueOf(1)

       1)parseInt接收String类型的入参,返回int

       2)valueOf接收String和int类型的入参,返回Integer

       ps:当然,你这样写也是成立的:int d = Integer.valueOf(s),编译器进行了隐式拆箱,将Integer转化为了int。

    三、比较

       1、int与Integer

         int a = 1;

         Integer b = 1;

         a==b为true,b先进性拆箱,与a比较的是值

       2、 Integer与Integer

          Integer a = new Integer(1)

          Integer b = 1

          Integer c = 1

          a==b? false

          解:a存在于内存堆中,b存在于常量池中,地址不同。任何new都会产生新的对象;Integer b = 1进行了隐式的装箱(调用了valueOf方法)

         

          b==c? true

          解:在内存中,会有一块叫做常量池的区域,专门存放b和c这种形式定义的对象,初始化时会先去常量池中寻找1,若已经存在,直接指向1,若不存在,生成对象1放入常量池。

          再看这个:

          Integer d = 128

          Integer e = 128

          d==e?false

          为什么这个不适合上面的常量池说法了呢?原因在于常量池指定了数值范围:-128~127。

          超过了这个范围,就会生成新的对象。

       3、比较两个Integer的值

          Integer a = new Integer(1)

          Integer b = new Integer(2)

          可以这样:a.intValue() == b.intValue() 或者 a.equals(b)

    四、获取最大值和最小值如此简单

        int a = Integer.MAX_VALUE; 2^31-1

        int b = Integer.MIN_VALUE; -2^31

    五、使用场景的限制

        1)很多方法参数就只接收对象类型

        2)泛型只支持对象类型

        3)考虑到数据库设计中某些数值列可以为null,持久话对象中使用引用类型,可接收null值

       

    关注老姜谈技术,微信号:helojava,或者扫描下面二维码。

    公众号二维码
    每日一帖,技术鸡汤。

  • 相关阅读:
    计算机视觉--语义分割
    对团队成员公开感谢
    韩昊20191031-1 每周例行报告
    韩昊20191024-1 每周例行报告
    韩昊20191017-1 每周例行报告
    TensorFlow在windows 下的安装
    20191010-2 每周例行报告
    韩昊 20190919-1 每周例行报告
    韩昊 20190919-4 单元测试,结对
    2505-springboot使用spring.profiles.active来分区配置
  • 原文地址:https://www.cnblogs.com/jiangkuan/p/6001147.html
Copyright © 2020-2023  润新知