java的primitive和reference类

java的primitive和reference类

ID:12054864

大小:24.72 KB

页数:4页

时间:2018-07-15

java的primitive和reference类_第1页
java的primitive和reference类_第2页
java的primitive和reference类_第3页
java的primitive和reference类_第4页
资源描述:

《java的primitive和reference类》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java的数据类型分为两类:primitive和reference类型Java虽然是个面向对象的语言,也声称“Everythingisobject”-一切都是对象。但是,我觉得还不够纯粹和彻底,和ruby或者python比较一下就知道了。在Java中,数字和布尔类型就不被看做对象,而是被称为primitive类型。不过也不见的就不好,本文也不是想对此评论和分析。本文是想阐述Java的数据类型。Java的数据类型Java的数据类型分为两类:primitive和reference类型。我们可以从hold数据这

2、个角度来说。primitive类型可以hold数字和布尔数据;reference类型可以hold对象,接口和数组类型的数据的指针。可以想象后一种数据比较复杂,往往是一段数据,不像primitive的数据是比较单纯的数据单元,比如int,float和boolean。除了数据构成之外,它们在数据上的操作也大不相同。比如下面的代码,main函数里面的a和b可以进行加减运算。而x,y你就不能做加减,你只能通过他们引用或者说访问他们的数据元素。再想想对于对象引用的变量,你可以调用对象的方法。primitive类型的

3、数据上你是不能做方法调用的。你也许听说过primitive的值不能共享,而reference的值可以。什么意思呢?就是说,比如下面的代码(List1)的aboutDataSharing,你认为会输出什么呢?从下面的输出你就可以看出,c和d没有共享数据,而r和s就共享数据了。Java代码1.c=11,d=92.r={2,3}3.s={2,3}值传递还是引用传递理解了上面的区别以后,我们再看看函数方法的参数传递。先看一个例子:List1packagecom.javasaloon.basis;publiccla

4、ssPrimitiveAndReference{publicstaticvoidmain(String[]args){aboutParamTransporting();aboutDataSharing();}privatestaticvoidaboutDataSharing(){intc=10;intd=c;c++;d--;System.out.printf("c=%d,d=%d",c,d);int[]r=newint[]{1,2};int[]s=r;r[0]++;s[1]++;System.out.

5、printf("r={%d,%d}",r[0],r[1]);System.out.printf("s={%d,%d}",s[0],s[1]);}privatestaticvoidaboutParamTransporting(){inta=1;intb=2;swap(a,b);System.out.printf("a=%d,b=%d",a,b);int[]x=newint[]{10,20};int[]y=newint[]{30,50};swap(x,y);System.out.printf("x

6、={%d,%d}",x[0],x[1]);System.out.printf("y={%d,%d}",y[0],y[1]);}privatestaticvoidswap(int[]is,int[]js){int[]x=is;is=js;js=x;}privatestaticvoidswap(inti,intj){intx=i;i=j;j=x;}}你不妨先想一下上面的aboutParamTransporting方法的输出结果。如果是用c语言写的上面的swap方法呢?对于两个int的swap是没有区别

7、的,他们都是值传递。但是对于两个int数组的swap就不会一样,这也正是值传递和引用传递的区别。int数组变量x和y虽然是引用,也可以被看做是数组的指针。但是java的方法中参数的传递是应用值的传递。Java里面没有c语言一样的地址指针,这也是Java安全的基础,更是Java垃圾回收或者说内存自动管理的关键。看看下面的结果吧:a=1,b=2x={10,20}y={30,50}Equals和==的区别理解了上面的例子,我们再看看Equals和==的区别。从概念上看,primitive和reference类型

8、的数据都能进行==的比较,而且是值的比较。对于primitive来说,就是它hold的值得比较;而对于reference的比较,来说就是指针的比较,而不是它指向的对象数据的比较。如果两个reference的变量==之后得到true,说明他们共同指向同一段数据区也就是同一个对象,接口或者数组。那么,怎么进行对象数据的比较呢?这样你就得用对象的Equals方法了。Object类是所有Java类的父类,它给出了一个默认的实现,就是比

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。