Java中String类型的参数传递问题的解析

Java中String类型的参数传递问题的解析

ID:37857961

大小:29.00 KB

页数:6页

时间:2019-06-01

Java中String类型的参数传递问题的解析_第1页
Java中String类型的参数传递问题的解析_第2页
Java中String类型的参数传递问题的解析_第3页
Java中String类型的参数传递问题的解析_第4页
Java中String类型的参数传递问题的解析_第5页
资源描述:

《Java中String类型的参数传递问题的解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、最开始的示例写代码最重要的就是实践,不经过反复试验而得出的说辞只能说是凭空遐想罢了。所以,在本文中首先以一个简单示例来抛出核心话题:publicclassStringAsParamOfMethodDemo{publicstaticvoidmain(String[]args){StringAsParamOfMethodDemoStringAsParamOfMethodDemo=newStringAsParamOfMethodDemo();StringAsParamOfMethodDemo.testA();}pr

2、ivatevoidtestA(){StringoriginalStr="original";System.out.println("TestABegin:");System.out.println("TheouterString:"+originalStr);simpleChangeString(originalStr);System.out.println("TheouterStringafterinnerchange:"+originalStr)System.out.println("TestAEnd.");

3、System.out.println();}publicvoidsimpleChangeString(Stringoriginal){original=original+"ischanged!";System.out.println("ThechangedinnerString:"+original);}这段代码的逻辑是这样的:先赋值一个String类型的局部变量,然后把这个变量作为参数送进一个方法中,在这个方法中改变该变量的值。编译运行之后,发现输出结果是这样的:TestABegin:TheouterStrin

4、g:originalThechangedinnerString:originalischanged!TheouterStringafterinnerchange:originalTestAEnd.这个结果表明在方法内部对String类型的变量的重新赋值操作并没有对这个变量的原型产生任何影响。好了,这个示例的逻辑和运行结果都展示清楚了,接下来我们来对这个小程序进行分析。在这之前我们先来回顾下Java中所谓的“传值”和“传引用”问题。二、Java中的“传值”和“传引用”问题许多初学Java的程序员都在这个问题上有所思

5、索,那是因为这是所谓的“C语言的传值和传指针问题”在Java语言上同类表现。最后得出的结论是:在Java中,当基本类型作为参数传入方法时,无论该参数在方法内怎样被改变,外部的变量原型总是不变的,代码类似上面的示例:intnumber=0;changeNumber(number){number++};//改变送进的int变量System.out.println(number);//这时number依然为0这就叫做“值传递”,即方法操作的是参数变量(也就是原型变量的一个值的拷贝)改变的也只是原型变量的一个拷贝而已,而

6、非变量本身。所以变量原型并不会随之改变。但当方法传入的参数为非基本类型时(也就是说是一个对象类型的变量),方法改变参数变量的同时变量原型也会随之改变,代码同样类似上面的示例:StringBufferstrBuf=newStringBuffer(“original”);changeStringBuffer(strBuf){strbuf.apend(“ischanged!”)}//改变送进的StringBuffer变量System.out.println(strBuf);//这时strBuf的值就变为了origina

7、lischanged!这种特性就叫做“引用传递”,也叫做传址,即方法操作参数变量时是拷贝了变量的引用,而后通过引用找到变量(在这里是对象)的真正地址,并对其进行操作。当该方法结束后,方法内部的那个参数变量随之消失。但是要知道这个变量只是对象的一个引用而已,它只是指向了对象所在的真实地址,而非对象本身,所以它的消失并不会带来什么负面影响。回头来看原型变量,原型变量本质上也是那个对象的一个引用(和参数变量是一样一样的),当初对参数变量所指对象的改变就根本就是对原型变量所指对象的改变。所以原型变量所代表的对象就这样被改

8、变了,而且这种改变被保存了下来。了解了这个经典问题,很多细心的读者肯定会立刻提出新的疑问:“可是String类型在Java语言中属于非基本类型啊!它在方法中的改变为什么没有被保存下来呢!”的确,这是个问题,而且这个新疑问几乎推翻了那个经典问题的全部结论。真是这样么?好,现在我们就来继续分析。三、关于String参数传递问题的曲解之一??直接赋值与对象赋值String类型的

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

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

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