欢迎来到天天文库
浏览记录
ID:10875774
大小:30.00 KB
页数:4页
时间:2018-07-08
《java引用类型和原始类型区别》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java引用类型和原始类型区别Java提供两种不同的类型:引用类型和原始类型(或内置类型)。另外,Java还为每个原始类型提供了封装类(Wrapper)。如果需要一个整型变量,是使用基本的int型呢,还是使用Integer类的一个对象呢?如果需要声明一个布尔类型,是使用基本的boolean,还是使用Boolean类的一个对象呢?本文可帮助您作出决定。 下表列出了原始类型以及它们的对象封装类。 原始类型封装类=================booleanBooleancharCharacterbyteByteshortShortintIntegerl
2、ongLongfloatFloatdoubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。例如,假定一个方法中有两个局部变量,一个变量为int原始类型,另一个变量是对一个Integer对象的对象引用:inti=5;//原始类型Integerj=newInteger(10);//对象引用 这两个变量都存储在局部变量表中,并且都是在Java操作数堆栈中操作的,但对它们的表示却完全不同。(本文中以下部分将用通用术语堆栈代替操作数堆栈或局部变量表。)原始类型int和对象引用各占堆栈的32位。(要表示一个int或一个对象引用,Jav
3、a虚拟机实现至少需要使用32位存储。)Integer对象的堆栈项并不是对象本身,而是一个对象引用。 Java中的所有对象都要通过对象引用访问。对象引用是指向对象存储所在堆中的某个区域的指针。当声明一个原始类型时,就为类型本身声明了存储。前面的两行代码表示如下: 引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。 许多程序的代码将同时包含原始类型以及它们的对象封装。
4、当检查它们是否相等时,同时使用这两种类型并了解它们如何正确相互作用和共存将成为问题。程序员必须了解这两种类型是如何工作和相互作用的,以避免代码出错。 例如,不能对原始类型调用方法,但可以对对象调用方法:intj=5;j.hashCode();//错误//。..Integeri=newInteger(5);i.hashCode();//正确使用原始类型无须调用new,也无须创建对象。这节省了时间和空间。混合使用原始类型和对象也可能导致与赋值有关的意外结果。看起来没有错误的代码可能无法完成您希望做的工作。例如:importjava.awt.Point;cl
5、assAssign{publicstaticvoidmain(Stringargs[]){inta=1;intb=2;Pointx=newPoint(0,0);Pointy=newPoint(1,1);//1System.out.println(“ais”+a);System.out.println(“bis”+b);System.out.println(“xis”+x);System.out.println(“yis”+y);System.out.println(“Performingassignmentand”+“setLocation.。.”);a
6、=b;a++;x=y;//2x.setLocation(5,5);//3System.out.println(“ais”+a);System.out.println(“bis”+b);System.out.println(“xis”+x);System.out.println(“yis”+y);}}这段代码生成以下输出:ais1bis2xisjava.awt.Point[x=0,y=0]yisjava.awt.Point[x=1,y=1]PerformingassignmentandsetLocation.。.ais3bis2xisjava.awt.Po
7、int[x=5,y=5]yisjava.awt.Point[x=5,y=5] 修改整数a和b的结果没什么意外的地方。b的值被赋予整型变量a,结果a的值增加了1。这一输出反映了我们希望发生的情况。但是,令人感到意外的,是在赋值并调用setLocation之后x和y对象的输出。我们在完成x=y赋值之后特意对x调用了setLocation,x和y的值怎么会相同呢?我们毕竟将y赋予x,然后更改了x,这与我们对整数a和b进行的操作没什么不同。 这种混淆是由原始类型和对象的使用造成的。赋值对这两种类型所起的作用没什么不同。但它可能看起来所有不同。赋值使等号(=)
8、左边的值等于右边的值。这一点对于原始类型(如前面的inta和b)是显而易见的。对
此文档下载收益归作者所有