ITPub博客

首页 > IT职业 > IT职场 > Java探秘之基本数据类型和包装类(int,Integer)(一)

Java探秘之基本数据类型和包装类(int,Integer)(一)

IT职场 作者:jenliang 时间:2021-09-09 09:01:09 0 删除 编辑

java有八种基本数据类型分别是,char、shoat、int、float、double、long、byte、boolean。
而它们对应的包装类也有,Character、Shoat、Integer、Float、Double、Long、Byte、Boolean。
那么他们之间有什么区别呢,简单来说他们是完全不同的概念,前者的java提供的基本数据类型,注意这里说了是基本数据类型;而后者则是java为它们提供常见处理的工具类,注意说了是类也就是它们存在着对象。

  1. 初始化
    这里以int和Integer为例举例说明,当我们初始化一个int和一个Integer并没有给定他们值时,前者默认值为0,而后者默认为null(空对象)。
    图片描述
    图片描述
    当我们需要传入一个参数时,对int、Integer的选择就很重要,如果我们传入的Intger为null很有可能抛出一个空指针异常使我们的程序蹦掉;而选择int时因为有初始值,不会出现Intger出现的问题,但是另一个问题也接踵而来,
    图片描述
    图片描述
    图片描述
    我们不知道传入的int值的多少,很有可能就会给我们的程序埋了一个影藏的bug;对于int还是Integer的选择我们应该通过现实场景进行选择。
    这里重点说一下,当我们使用MVC模式开发时,Controller接收参数如果参数不存在,而参数是int类型时就会抛出一个参数不存在异常,而Integer却不会,只是得到的参数为null。
    2)自动拆箱,自动装箱机制
    自动拆箱和自动装箱机制是在JDK1.5引进的一个新机制,观察下面的代码,为什么会有这样的结果产生呢。
    Integer a = 34;
    int b = 34;
    Integer c = b;
    int d = a;
    System.out.println( a == b);
    System.out.println( d == c);
    基本数据类型的和其包装类的相互转换,这是为什么呢?
    答案很简单,因为我们在执行Integer a = 34; 代码时jdk默认执行的是Integer a = Integer.valueOf(34);
    而我们在执行int d = a;时编译执行的却是int d = a.intValue();
    你可能会有疑问,为什么会是这样?
    这个时候我们就需要打开源码进行查看寻找答案。

    public int intValue() {
    return (int)value;
    }
    什么,居然是个强转,搞了半天还是强转,那为啥我们那样转不行呢,因为我们是类强转,而它是类型转换。
    挖槽还真可以,说明这就没错了。
    4)内存使用
    这次那long类型来举例,因为这样举例会比较明显,我们知道long类型是占8个字节(占用跟系统有关),而Long包装类呢,却是一个对象。
    Long start = System.currentTimeMillis();
    Long l = 0L;
    for (Integer i = 0; i l++;
    }
    System.out.println(System.currentTimeMillis() - start);
    这段代码会执行多久呢,好像是一瞬间的事,可是他执行了13060ms,可能这关系到机器,但是这个问题是很严重的,如果不小心写了这样的代码,搞蹦一个程序是很简单的事情。
    这里每次执行l++操作其实都相当于创建了一个新的实例,那这个量就非常大了,而如果换成基本数据类型的话,从始至终它都是8个字节。
    我们修改一下程序
    Long start = System.currentTimeMillis();
    long l = 0L;
    for (int i = 0; i l++;
    }
    System.out.println(System.currentTimeMillis() - start);
    那么它的运行时间又是多少呢?78ms
    是不是很惊讶,相差了好几百倍,所以我们绝对不可以出现这样的代码,对于基本数据类型还是包装类的选择,我们首选还是基本数据类型,而当某些场景无法继续使用基本数据类型时,我们才使用包装类进行处理。
    OK,到此为止,基本数据类型跟包装类之间的关系和区别我就讲完了,如果有讲的不好或者是讲得不对的地方大家一定要指出来,不然我就没法进步了。
    到时候博客开通了,还需要各位老少爷们捧场哈。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4565/viewspace-2798668/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-15

  • 博文量
    189
  • 访问量
    858