A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我学了几个月的java了,这个问题只是想到的几点,希望大家一起帮我总结一下。。谢谢了!!!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

倒序浏览
关于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的存储空间中

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
基本类型:

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

引用类型:

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

举例说明:   

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的存储空间中

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
给你一张图吧。

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

image001.jpg

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

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

char类型有初始化默认值的啊是u00000
回复 使用道具 举报
王靖远 发表于 2013-5-16 09:25
char类型有初始化默认值的啊是u00000

没有吧 你说的应该是字符型数组啊。char[]arr
回复 使用道具 举报
楼主你好   如果帖子已经解决  请把帖子的类型改为“已解决”。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马