zoukankan      html  css  js  c++  java
  • Java Bean 使用包装类型 还是基本类型

    参考:实体类中用基本类型好,还是用包装类型好_ - 牵牛花 - 博客园

    int优缺点

    优点:

    1.用于Bean的时候,有默认值。比如自己拼接sql增加一个User时,会方便很多,不过现在都用ORM框架,所以这也不算是优点啦。

    2.两个值比较方便,使用 == 就可以了。

    缺点:

      //错误
      int a1 = (Integer) null;
      //错误
      boolean x1 = (Boolean)null;
      //正确
      Integer a2 = (Integer) null;
      Boolean x2 = (Boolean)null;

    阿里巴巴开发手册中写的很明确,基本类型接收NULL值有NPE风险(java.lang.NullPointerException  NPE 空值异常),而且默认值和NULL值不能传达同一种信息。

     

    Integer优缺点

    优点:可以存放null,从数据库中查出值时可能会有null

    缺点:Intege不能使用 == 比较相等。

            Integer i1 = 127;
            Integer i2 = 127;
            Integer i3 = 128;
            Integer i4 = 128;
            /**
             *   public static Integer valueOf(int i) {
             if (i >= IntegerCache.low && i <= IntegerCache.high)
             return IntegerCache.cache[i + (-IntegerCache.low)];
             return new Integer(i);
             }
             */
            System.out.println("  i1 == i2 "+(i1 == i2));//true
            System.out.println("  i3 == i4 "+(i3 == i4));//false
            int i6 = 127;
            int i7 = 127;
            int i8 = 128;
            int i9 = 128;
    System.out.println(
    " i6 == i7 "+(i6 == i7));//true System.out.println(" i8 == i9 "+(i8 == i9));//true System.out.println(" i1 == i6 "+(i6 == i1));//true 与 int 类型的比较都是值比较 System.out.println(" i8 == i3 "+(i8 == i3));//true int i10 = new Integer(128); int i11 = new Integer(128); System.out.println(" i10 == i11 "+(i10 == i11));//true Integer i12 = new Integer(127); Integer i13 = new Integer(127); System.out.println(" i12 == i13 "+(i12 == i11));//false 对象地址比较

    把int类型赋值给Integer类型。此时,int类型变量的值会自动装箱成Integer类型,然后赋给Integer类型的引用,这里底层就是通过调用valueOf()这个方法来实现所谓的装箱的。
    把Integer类型赋值给int类型。此时,Integer类型变量的值会自动拆箱成int类型,然后赋给int类型的变量,这里底层则是通过调用intValue()方法来实现所谓的拆箱的。

    Integer 和 int 进行比较分三情况
    1、Integer与int类型的比较
          这里就无所谓是谁与谁比较了,Integer == int与int == Integer的效果是一样的,都会把Integer类型变量拆箱成int类型,然后进行比较,相等则返回true,否则返回false。同样,拆箱调用的还是intValue()方法。
    2、Integer之间的比较
          这个就相对简单了,直接把两个引用的值(即是存储目标数据的那个地址)进行比较就行了,不用再拆箱、装箱什么的。

      值得注意的是:如果为Integer=某个数值这种情况的, Integer之间的比较,JVM会自动缓存-128~127范围内的值,所以所有在这个范围内的值相等的Integer对象都会共用一块内存,而不会开辟多个;超出这个范围内的值对应的Integer对象有多少个就开辟多少个内存。

    3、int之间的比较

    这个也一样,直接把两个变量的值进行比较。

     
  • 相关阅读:
    利用apktool反编译apk
    CF459E Pashmak and Graph (Dag dp)
    CF919D Substring (dag dp)
    BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)
    LUOGU P3048 [USACO12FEB]牛的IDCow IDs(组合数)
    LUOGU P2290 [HNOI2004]树的计数(组合数,prufer序)
    小球放盒子 (组合数总结)
    LUOGU P2294 [HNOI2005]狡猾的商人(差分约束)
    LUOGU P4159 [SCOI2009]迷路(矩阵乘法)
    bzoj 1196: [HNOI2006]公路修建问题(二分+贪心)
  • 原文地址:https://www.cnblogs.com/alway-july/p/8118536.html
Copyright © 2011-2022 走看看