zoukankan      html  css  js  c++  java
  • 【Java心得总结一】Java基本类型和包装类型解析

      说到数据类型这个问题是一个基本的不能再基本的问题,我们当初编程入门第一课一般就是讲数据类型,而今天我想记录的是一个在Java中容易忽略的问题,即基本类型和包装类型。

    一、基本类型出现的原因

    们都知道在Java语言中,new一个对象存储在堆里,我们通过堆栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效——特别是简单的小的变量。(如下图所示为内存空间示意图)

    所以就出现了基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在堆栈中,因此更加高效。

    Java共有9中基本类型,同别的语言有重要区别的是这9中类型所占存储空间大小与机器硬件架构无关,这使得Java程序有很强的可移植性,如下图:

    二、包装类型产生的原因

    有了这9中基本类型,按理说应该够用了啊,但是Java还提供了相应的包装类型,如int对应Integer,char对应Character。为什么要有包装类型?

    是因为Java是一个面向对象的语言,基本类型并不具有对象的性质,为了与其他对象“接轨”就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

    这里大家可能会担心一个问题,那岂不是我们在使用二者时要来回转换?这点Java的自动包装功能将会自动为我们完成,如下代码显示Character和char之间的相互转换:

    1 Character ch = new Character('x');
    2 char c = ch;
    3 
    4 char c = 'c';
    5 Character ch = new Character(c);

    三、包装类型与基本类型异同

    最后总结一下:

    1.声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;

    2.存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用;

    3.初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null

    4.使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到

  • 相关阅读:
    C++模板进阶指南:SFINAE
    SFINAE and enable_if
    Effective Modern C++:05右值引用、移动语义和完美转发
    C++左值和右值
    Effective Modern C++:04智能指针
    Effective Modern C++:03转向现代C++
    Effective Modern C++:02auto
    Effective Modern C++:01类型推导
    c++ vitual继承
    c++正确处理 is-a has-a关系
  • 原文地址:https://www.cnblogs.com/xlturing/p/3584386.html
Copyright © 2011-2022 走看看