Java的参数传递
2016-03-07 00:00
316 查看
摘要: Java的参数传递
java中参数的传递方式根据参数类型的不同而分为两种情况。
对于基本类型,比如int、long等类型,采用的是传值策略是:将“参数的值”复制一份后传递给方法,方法可以改变参数值的复件,但不会影响参数值的原件。
对于对象类型,采用的传值策略是:将”参数的引用“复制一份(此时有两个引用指向同一个对象)传递给方法,方法可以改变引用的复件,但不会改变引用的原件。即方法可以把复件指向另一个对象,但是原件指向的还是原来的对象。
java中参数的传递方式根据参数类型的不同而分为两种情况。
对于基本类型,比如int、long等类型,采用的是传值策略是:将“参数的值”复制一份后传递给方法,方法可以改变参数值的复件,但不会影响参数值的原件。
对于对象类型,采用的传值策略是:将”参数的引用“复制一份(此时有两个引用指向同一个对象)传递给方法,方法可以改变引用的复件,但不会改变引用的原件。即方法可以把复件指向另一个对象,但是原件指向的还是原来的对象。
public class PassParamter { public PassParamter() { } public void methodA(ComplexNumber comNum) { // comNum这个引用指向了一个新new出来的对象。 comNum = new ComplexNumber(1, 2); } public void methodB(ComplexNumber comNum) { // comNum这个引用指向的还是同一个对象,但是,这里修改该对象的值。 comNum.setRealPart(1); comNum.setRealPart(2); } public void methodC(int num) { // 将num的值加1 num++; } public static void main(String[] args) { PassParamter test = new PassParamter(); ComplexNumber comNum = new ComplexNumber(5, 5); System.out.println("调用methodA方法之前,comNum: " + comNum.toString()); test.methodA(comNum); System.out.println("调用methodA方法之后,comNum: " + comNum.toString()); System.out.println("调用methodB方法之前,comNum: " + comNum.toString()); test.methodB(comNum); System.out.println("调用methodB方法之后,comNum: " + comNum.toString()); int num = 0; System.out.println("调用methodC方法之前,num: " + num); test.methodC(num); System.out.println("调用methodC方法之后,num: " + num); // 调用methodA方法之前,comNum: 5.0 + 5.0i // 调用methodA方法之后,comNum: 5.0 + 5.0i // 调用methodB方法之前,comNum: 5.0 + 5.0i // 调用methodB方法之后,comNum: 2.0 + 5.0i // 调用methodC方法之前,num: 0 // 调用methodC方法之后,num: 0 /** * Java的参数传递策略: * 0,所谓传值的意思是:在调用方法时,将参数的值复制一份,方法里面用复件,方法外面用原件,复件改变了,不影响原件;原件改变了,不影响复件。 * 1,对于基本数据类型,比如int,long等类型,采用传值的策略。将参数的值复制一份后传给方法,方法可以改变参数值的复件,但不会改变参数值的原件。 * 2,对于对象类型,也采用的传值策略,不过,是将参数的引用复制(2个引用指向同一个对象)一份传给方法,方法可以改变参数引用的复件,但不会改变参数引用的原件。 * * 解释三个输出: * 1,调用methodA方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodA方法,main方法保持引用的原件,此时,引用原件和引用复件都指向comNum对象。 * 执行comNum = new ComplexNumber(1,2);语句后,将引用复件指向了另外一个新的对象,此时,引用复件和引用原件指向的是不同的对象。回到main方法时,操作的仍然是引用原件指向的comNum对象。 * 2,调用methodB方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodB方法,main方法保持引用的原件,此时,有引用原件和引用复件都指向comNum对象。 * 执行comNum.setRealPart(1);comNum.setRealPart(2);语句后,修改了引用复件所指对象的内容,而此时,引用复件和引用原件指向的是同一个对象,因此,引用原件指向的对象的内容也改变了。回到main方法时,comNum对象也改变了。 * 3,调用methodC方法时,首先将num的值复制一份,将值的复件传递给methodC方法,main方法保持值的原件。 执行num * ++;语句后,复件的值会加1。回到main方法时,操作的仍然是原件,值保持不变。 */ } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树