Java 中基本类型 和 引用类型 变量的区别

一。基本概念

java 中的 数据类型 分为两大类: 基本数据类型 和 引用数据类型

基本数据类型 : 数值型,浮点型, 字符型 和 布尔型。 它的 值 是一个数字,一个字符或一个布尔值。

引用数据类型 : 类,接口类型,数组类型, 枚举类型, 注解类型。 是一个 对象类型,它的 值 是 指向内存空间的引用,就是 地址,所指向的内存中保存着变量所表示的一个值或一组值。 


二。 区别 -----  存储方式

1. 基本类型变量 声明 时,系统直接给该变量 分配空间,因此程序中可以直接操作

 eg. int a; 声明变量a的同时,系统给a分配了空间,   故 可直接  赋值  a = 5;

2. 引用类型(或称为引用型)变量声明时,只 给该变量分配 引用空间, 数据空间 未分配。因此 引用型变量声明后 不能直接引用,必须通过 实例化 开辟数据空间,才能对变量所指向的对象进行访问
 
 eg. MyDate today = 14; // 错误!因为today对象的数据空间未分配
     
     MyDate today = new MyDate( 14 ); 正确! 首先执行 new MyDate()给today变量 开辟 数据空间,然后再执行 赋值 操作

3. 案例分析
    
   申明一个类 MyDate,其中有属性day,mouth,year等,有构造方法(带参数),为其创建一个对象

   MyDate day = new MyDate(8,8,2017);

  在内存中的具体创建过程是:

   1)首先在 栈内存 中为 day 分配一块 引用空间;
   2)然后在 堆内存 中为 MyDate对象 分配一块空间,并为其三个属性设初值0,0,0;
   3)根据类MyDate中对属性的定义,为该对象的三个属性进行赋值操作;
   4)调用构造方法,为三个属性赋值为8,8,2017;(注意这个时候day 与MyDate对象之间还没有建立联系  ) 
   5)将MyDate对象在堆内存中的地址,赋值给栈中的day ; 通过句柄 day 可以找到堆中对象的具体信息


你可能感兴趣的:(Java,基础)