时间:2021-05-20
一、参数传递方法
为解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:
1.按值传递
2.按引用传递
3.按指针传递
其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值;按引用传递表示方法(函数)接收的调用者提供的变量地址;按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址。
二、Java参数传递方法
Java提供的参数传递方法,很遗憾只有一种,按值传递。也就是说,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的参数变量的内容。
Java的方法参数类型可以分为两类:
1.基本数据类型
2.对象引用
有过Java开发经验的朋友都知道,对于基本数据类型,Java方法无法改变变量内容。那对自定义类的对象引用是否也不能修改内容呢?可以通过一个简单的例子说明。代码如下:
上面代码执行输出结果如下:
从结果中可以看出,change方法能够修改对象的状态。也就是说Java方法可以改变对象的参数状态。那这是否意味着Java方法对于自定义的数据类型(自定义类)的参数采用的是引用传递?为了确认结果可以编写个简单例子,所有的自定义类仍然是上面的MyClass。代码如下:
pubpc static void swap(MyClass a,MyClass b){ MyClass tmp=a; a=b; b=tmp; } pubpc static void main(String[] args){ MyClass a=new MyClass(10); MyClass b=new MyClass(100); System.out.println("交换之前a的值为:"+a.getNum()); System.out.println("交换之前b的值为:"+b.getNum()); swap(a,b); System.out.println("交换之后a的值为:"+a.getNum()); System.out.println("交换之后b的值为:"+b.getNum()); }}执行结果如下:
通过上面结果可以发现,Java方法对自定义类的参数传递使用的仍然是值传递,不是引用传递。那为什么Java方法能够修改对象状态呢?
可以考虑调用change方法的具体执行过程,从中寻找答案。
调用change方法事,具体的执行过程是:
myClass被初始化成实参a的copy,这是对对象的引用。
setNum方法应用于这个对象的引用。myClass和a同时引用的那个MyClass对象的num变为了100。
方法结束后,参数变量myClass不再使用。而a继续引用那个num变为100的MyClass对象。如下图所示。
所以,Java方法能够实现改变对象参数状态的原因是:方法得到的是对象引用的拷贝,对象引用及方法中的其他拷贝同时引用同一个对象。
现在,总结一下Java的方法参数使用:
方法不能修改一个基本数据类型的参数;
方法可以改变对象参数的状态;
方法不能让对象参数引用一个新的对象(原因参考调用change方法时的具体执行过程)。
三、交换变量的数值
既然已经知其所以然,那么知其然就不是难事了。直接贴出我的个人代码:
pubpc static void swap(MyClass a,MyClass b){ Object tmp=a.getNum(); a.setNum(b.getNum()); b.setNum(tmp);}执行结果如下:
交换有效。
参考文献:Java核心技术 卷Ⅰ。
以上这篇Java 交换两个变量的数值实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
创建一个类,在该类中定义两个变量并为其指定初始值,然后交换两个变量的值,要求不允许借助第三个变量,只能使用异或运行实现两个变量值的交换。复制代码代码如下:imp
本文实例讲述了Python实现变量数值交换及判断数组是否含有某个元素的方法。分享给大家供大家参考,具体如下:本来,这两个问题都属于的编程入门简单得不能再简单的问
一般实现两个变量之间的互换要用第三个变量,这样做可以,但创建新变量,增加了系统开销。如果要交换的变量时两个整数型变量,可以用更高效的方法。例如:^(异或)操作,
大部分语言,例如c语言,交换两个变量的值需要使用中间变量。例如交换a,b伪代码:tmp=aa=bb=tmppython里面可以实现无临时变量的交换(a,b)=(
Java程序中测试两个变量是否相等有两种方式:一种是利用==运算符,另一种是利用equals()方法。当使用==来判断两个变量是否相等时,如果两个变量是基本类型