美文网首页
049:基本类型优先于包装类型

049:基本类型优先于包装类型

作者: 编程界的小学生 | 来源:发表于2017-03-21 21:53 被阅读0次

基本类型和包装类型之间有三个主要区别:

  • 1、基本类型只有值,而两个包装类型可以具有相同的值和不同的同一性(值相同,但是==false)

  • 2、基本类型只有功能完备的值,而每个包装类型除了它对应基本类型的所有功能值以外,还有个非功能值:null。

  • 3、基本类型通常比包装类型更节省时间和空间。

案例

(一)

package demo.one;

import java.util.Comparator;

/**
 * 存在问题的实现方式
 * 
 * @author TongWei.Chen
 * @date 2017年3月21日21:08:11
 */
public class BadDemoOne {
    //比较器,返回的数值到底是正数负数还是0,取决于他的第一个参数是小于等于还是大于第二个参数
    static Comparator<Integer> naturalOrder = new Comparator<Integer>() {
        public int compare(Integer first, Integer second) {
            return first < second ? -1 : (first == second ? 0 : 1);
        }
    };
    
    public static void main(String[] args) {
        System.out.println(naturalOrder.compare(new Integer(66),
                new Integer(66))); //1
    }
}

从结果可以看出,输出的居然是1,而不是0,原因在于first和second两个参数表示同一个int值,但是是不同的Integer实例。所以这个比操作会返回false,对包装类用==去比较几乎总是错的,建议包装类用equals去比较。

(二)解决上述问题

package demo.one;

import java.util.Comparator;

/**
 * 解决BadDemoOne方式
 * 
 * @author TongWei.Chen
 * @date 2017年3月21日21:08:11
 */
public class GoodDemoOne {
    //比较器,返回的数值到底是正数负数还是0,取决于他的第一个参数是小于等于还是大于第二个参数
    static Comparator<Integer> naturalOrder = new Comparator<Integer>() {
        public int compare(Integer first, Integer second) {
            int f = first;
            int s = second;
            return f < s ? -1 : (f == s ? 0 : 1);
        }
    };
    
    public static void main(String[] args) {
        System.out.println(naturalOrder.compare(new Integer(66),
                new Integer(66))); //0
    }
}

强制在使用时让他拆箱成基本类型,结果输出正常,返回0。

(三)

package demo.two;

/**
 * 存在NullPointerException
 * 
 * @author TongWei.Chen
 * @date 2017年3月21日21:26:28
 */
public class Unbelievable {
    
    //包装类型默认null
    static Integer i;
    
    public static void main(String[] args) {
        if(i == 42) {
            System.out.println("我错了嘛?");
        }
    }
}

抛出NullPointerException,因为包装类型默认null

(四)解决上述问题

package demo.two;

/**
 * 解决NullPointerException
 * 
 * @author TongWei.Chen
 * @date 2017年3月21日21:26:28
 */
public class Believable {
    
    //int基本类型默认0
    static int i;
    
    public static void main(String[] args) {
        if(i == 42) {
            System.out.println("我错了嘛?");
        }
    }
}

不会抛出任何异常

包装类型做运算操作比基本类型慢几十倍,参考我的另外一篇文章http://www.jianshu.com/p/54e5fa72d5b5

问:那么我们什么时候用包装类型呢?
答:有三个合理的用处

  • 1、作为集合中的元素、键和值。
  • 2、在参数化类型中,必须使用包装类。
  • 3、进行反射的方法调用时,必须使用装箱基本类型。

总之:当可以选择的时候,基本类型要优于包装类型。基本类型更简洁更快速。

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg

相关文章

  • 049:基本类型优先于包装类型

    基本类型和包装类型之间有三个主要区别: 1、基本类型只有值,而两个包装类型可以具有相同的值和不同的同一性(值相同,...

  • Java基础知识(一):基本类型 VS 包装类型

    1. 基本类型 VS 包装类型 基本类型包装类型booleanBooleancharCharacterintInt...

  • Java的自动装箱(Autoboxing)和拆箱(unboxin

    装箱和拆箱 装箱-将基本数据类型转换为包装器类型;拆箱-包装器类型转换为基本数据类型。 基本类型包装类型intIn...

  • Java自动装箱,拆箱

    1.装箱:自动将基本数据类型转换为包装器类型 拆箱:将包装器类型转化为基本数据类型 基本数据类型 包装器类型 i...

  • 基本包装类型

    基本包装类型 3个特殊的引用类型:Boolean、Number、String 引用类型与基本包装类型的主要区别就是...

  • 第五章(5):基本包装类型和单体内置对象

    基本包装类型 每当读取一个基本类型值的时候,后台就会创建一个与之对应的基本包装类型。基本包装类型顾名思义就是对基本...

  • 基本包装类型

    本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者是方法,那么这种类型就不再是基本类型了,而...

  • 基本包装类型

  • 基本包装类型

    基本类型:字符串 + 数值 + null + undefined + 布尔值 为了便于操作基本类型,ECMAScr...

  • 基本包装类型

    针对布尔类型,数值类型,字符串类型JavaScript都提供了对应的包装类型。当三种类型的变量在读取操作的时候,J...

网友评论

      本文标题:049:基本类型优先于包装类型

      本文链接:https://www.haomeiwen.com/subject/nhtnnttx.html