- 1
- 0
- 约9.13千字
- 约 22页
- 2018-03-13 发布于河南
- 举报
传值和传引用
???1所谓传值和传引用
????? 传值和传引用的问题一直是Java里争论的话题。与C++不同的,Java里面没有指针的概念,Java的设计者巧妙的对指针的操作进行了管理。事实上,在懂C++的Java程序员眼中,Java到处都是精美绝伦的指针。下面举个简单的例子,说明什么是传值,什么是传引用。//例1void method1(){int x=0;this.change(x);System.out.println(x);}
void change(int i){i=1;}
????? 很显然的,在mothod1中执行了change(x)后,x的值并不会因为change方法中将输入参数赋值为1而变成1,也就是说在执行change(x)后,x的值依然是0。这是因为x传递给change(int i)的是值。这就是最简单的传值。同样的,进行一点简单的变化。//例2void method1(){StringBuffer x=new StringBuffer(Hello);this.change(x);System.out.println(x);}
void change(StringBuffer i){i.append( world!);}????? 看起来没什么变化,但是这次mothed1中执行了change (x)后,x的值不再是Hello了,而是变成了Hello world!。这是因为x传递给change(i)的是x的引用。这是最经典的传引用。似乎有些奇怪了,两段程序没有特别的不同,可是为什么一个传的是值而另一个传的是引用呢?......
??
一个例子://例3void mothed1(){int x=0;int y=1;switchValue(x,y);System.out.println(x=+x);System.out.println(y=+y);}void switchValue(int a,int b){
int c=a;a=b;b=c;}????? 上面是一个交换a,b值的函数,看起来似乎蛮正确的,但是这个函数永远也不会完成你想要的工作。????? 还有一个例子://例4StringBuffer a=new StringBuffer(I am a );StringBuffer b=a;a.append(after append);a=b;System.out.println(a=+a);//a的值已经改变在编程过程中,经常会遇到这种情况,一个变量的值要被临时改变一下,等用完之后再恢复到开始的值。就好像上面的例子,a为了保持它的值,使用b=a做赋值,之后a被改变,再之后a把暂存在b里面的值取回来。这是我们一厢情愿的想法,而事实上,这段代码执行后,你会发现a的值已经改变了。以上是两个最简单的例子,真正的程序开发过程中,比这要复杂的情况每天都会遇到。
??????3类型和类
????? Java 提出的思想,在Java里面任何东西都是类。但是Java里面同时还有简单数据类型int,byte,char,boolean,与这些数据类型相对应的类是Integer,Byte,Character,Boolean,这样做依然不会破坏Java关于任何东西都是类的提法。这里提到数据类型和类似乎和我们要说的传值和传引用的问题无关,但这是我们分辨传值和传引用的基础。
??????4试图分辨传值还是传引用
????? 为什么是试图分辨呢?很简单,传值和传引用的问题无处不在,但是似乎还没有人能正统的给出标准,怎样的就是值拷贝调用,怎样的就是引用调用。面对这个问题,我们更多的应该是来自平时积累对Java的理解。????? 回过头来,我们分析一下上面的几个例子:????? 先看例1,即使你不明白为什么,但是你应该知道这样做肯定不会改变x的值。为了方便说明,我们给例子都加上行号。//例11 void method1(){2?? int x=0;3?? this.change(x);4 }56 void change(int i){7 i=7;8}????? 让我们从内存的存储方式看一下x和I之间到底是什么关系。????? 在执行到第2行的时候,变量x指向一个存放着int 0的内存地址。
????? 变量x----[存放值0]
????? 执行第3行调用change(x)方法的时候,内存中是这样的情形:x把自己值在内存中复制一份,然后变量i指向这个被复制出来的0。
????? 变量x----[存放值0]??????????????????????? 进行了一次值复制????? 变量x----[存放值0]
????? 这时候再执行到第7行的时候
您可能关注的文档
- 延长油田简历封面.doc
- 第7课时(比的基本性质).doc
- 藤柳编织项目可行性研究报告(2013年发改委评审方案设计)-专家免费咨询.pdf
- 肿瘤射频消融治疗技术市场现状及发展前景报告.doc
- 跨越“卡夫丁峡谷”与社会主义发展.doc
- 物质的物理属性作业4(质量与天平).doc
- 必修二复习--空间几何体(吕瑞娇).doc
- CNG相关参数.doc
- 课程设计报告_考试系统.doc
- 在思想的芦苇里做一名行者.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- 北师大版三年级下册数学全册教学设计(配2026年春改版教材).docx
- (2026年)跌倒坠床护理综合指南PPT课件.pptx VIP
- 工程设计应急响应方案(3篇).docx VIP
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- ntvf调试资料解读.doc VIP
- 电影《色.戒》的叙事伦理.doc VIP
- 上海大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(A卷)附参考答案.pdf
- 佳能EOS1500D基本使用说明书说明书.pdf VIP
- 上海大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 渣打银行(香港)有限公司.PDF VIP
原创力文档

文档评论(0)