黑马程序员技术交流社区

标题: java中基本数据类型和引用数据类型的区别有哪些? [打印本页]

作者: 韩秀山    时间: 2013-5-15 16:48
标题: java中基本数据类型和引用数据类型的区别有哪些?
我学了几个月的java了,这个问题只是想到的几点,希望大家一起帮我总结一下。。谢谢了!!!

作者: 惜别的海岸    时间: 2013-5-15 23:16
关于java中基本数据类型和引用数据类型的区别,主要有以下几个地方:

1.基本类型与引用类型变量

      *基本类型(primitive type)

        基本数据类型的变量包含了单个值,这个值的长度和格式符合变量所属数据类型的要求,可以是一个数字、一个字符或一个布尔值,例如一个整型值是32位的二进制补码格式的数据,而一个字符型的值是16位的Unicode字符格式的数据等。

      *引用类型(reference type)

        引用型变量的值与基本类型变量不同,变量值是指向内存空间的引用(地址)。所指向的内存中保存着变量所表示的一个值或一组值。

        引用在其他语言中称为指针或内存地址。Java语言与其他程序设计语言不同,不支持显示使用内存地址,而必须通过变量名对某个内存地址进行访问。

2.两种变量的不同处理

        在Java语言中基本类型变量声明时,系统直接给该变量分配空间,因此程序中可以直接操作。例如,

        int a;       //声明变量a的同时,系统给a分配了空间

        a=12;

        引用类型(或称为引用型)变量声明时,只是给该变量分配引用空间,数据空间未分配。因此引用型变量声明后不能直接引用,下列第二条语句是错误的:

        MyDate today;

        today.day = 14;               //错误!因为today对象的数据空间未分配

         ......

         引用类型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进行访问。通过对引用型变量声明与实例化语句的执行过程分析,可以理解系统对引用型变量的上述处理。例如有如下语句:

        MyDate today;

        today = new Date();

        第一条语句的执行,将给today变量分配一个保存引用的空间,第二条语句分两个步骤执行,首先执行new  Date(),给today变量开辟数据空间,然后再执行第二条语句中的赋值操作,

3.引用变量的赋值

        Java中引用型变量之间的赋值是引用赋值。例如,下列语句执行后,内存的布局如图3-5所示。

         MyDate a,b;       //在内存中开辟两个引用空间

         a = new MyDate();       //开辟MyDate对象的数据空间,并把该空间的首地址赋给a

         b = a;                    //将a存储空间中的地址写到b的存储空间中


作者: 刘学明       时间: 2013-5-15 23:40
基本类型:

基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。

引用类型:

是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

举例说明:   

int  a;  
a=250; //声明变量a的同时,系统给a分配了空间。

引用类型就不是了,只给变量分配了引用空间,数据空间没有分配,因为谁都不知道数据是什么,整数,字符?我们看一个错误的例子:

MyDate today;

today.day = 4; //发生错误,因为today对象的数据空间未分配。

那我们怎么给它赋值?引用类型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进行访问。举个例子:

MyDate today;            //将变量分配一个保存引用的空间

today = new MyDate();     //这句话是2步,首先执行new MyDate(),给today变量开辟数据空间,然后再执行赋值操作

//引用变量赋值

MyDate a,b;                    //在内存开辟两个引用空间

a  =  new MyDate();     //开辟MyDate对象的数据空间,并把该空间的首地址赋给a

b  =  a;                               //将a存储空间中的地址写到b的存储空间中


作者: 飞鸟青崖    时间: 2013-5-16 07:36
给你一张图吧。

image001.jpg (19.53 KB, 下载次数: 1)

image001.jpg

作者: 8047107    时间: 2013-5-16 08:52
楼上的给图也没用啊。
基本类型在栈内存中,没有初始化默认值。
引用数据类型在堆内存中,都有初始化默认值。
这是我目前已知的。当然具体包含的变量类型可以见楼上
作者: 王靖远    时间: 2013-5-16 09:25
8047107 发表于 2013-5-16 08:52
楼上的给图也没用啊。
基本类型在栈内存中,没有初始化默认值。
引用数据类型在堆内存中,都有初始化默认值 ...

char类型有初始化默认值的啊是u00000
作者: 8047107    时间: 2013-5-16 09:38
王靖远 发表于 2013-5-16 09:25
char类型有初始化默认值的啊是u00000

没有吧 你说的应该是字符型数组啊。char[]arr
作者: 袁梦希    时间: 2013-5-16 11:49
楼主你好   如果帖子已经解决  请把帖子的类型改为“已解决”。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2