java方法的传递方式_JAVA基础--方法传参

JAVA基础--方法传参

为啥拿这个当话题?

在初学者阶段,许多童鞋都对方法传参比较迷茫,知其然不知其所以然。

一.先说说参数传递的几个术语:

值调用(call by vale):表示方法接收的是调用者传递的值。

引用调用(call by reference):表示方法接收的是调用者传递的变量地址。

一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值;

**JAVA语言总是采用值调用。也就是说,JAVA方法得到的是所有参数值的一个拷贝,方法不能修改传递给他的任何参数变量的内容。

例如:

int age=100;

person.setAge(age);

在以上方法调用后,age 的值还是100;

下面再看一例子,假如某方法将一个变更值修改为原来的值的3倍:

public void addValue(int x){

x = 3 * x;

}

然后调用这个方法:

int percent = 10;

addValue(percnet);

无论如何调用,percent的值还是10,下面是执行过程:

1.x被初始化为percent值的一个拷贝(也就是10);

2.x被乘以3后,值变为30。但是percent仍然是10;

3.该方法结束后,参数变量x不再使用。

如图一:

8f9c188eb32ac42e64d0384d6243ac97.png

二.java方法传参类型:

基本数据类型:(数字,布尔型)

对象引用类型:

基本数据类型传参在上例中已经说过了,是不能修改基本数据类型参数的值的.

那么对于对象引用类型的传参,能否修改呢?

先来看例子:

有如下方法:

public static void tripleSalary(Employee x)

{

x.raiseSalary(200);

}

当调用如下代码

harry = new Employee();

tripleSalary(harry);

时,具体的执行过程如下:

1).x被初始化为harry对象的拷贝,这里是一个对象的引用;

2).raiseSalary方法应用于这个对象引用.即x和harry同时引用的Employee对象薪金提高了200%.

3).方法调用结束后,参数变量x不再使用.但对象变量harry继续引用那个薪金增至3倍Employee对象.

其过程如下图:

e2eff9d9591b7af7bfaf296a2dbc6818.png

通过以上实例,可以看出对象参数传递的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象.

很多程序语言提供两种传递方式:值传递和引用传递(C++和Pascal).

有些程序员认为java语言对对象参数传递也是用的引用调用.实际上是理解错误.这种错误具有一定的普遍性.下面通过一反例来说明该问题:

首先,编写一个交换两个Employee对象的方法:

public staitc void swap(Employee x,Emplyee y)

{

Employee temp = x;

x = y;

y = temp;

}

如果JAVA程序语言是对对象采用引用调用,那么这个方法就应该能够实现交换数据的效果:

Employee a = new Employee("Alice",...);

Employee b = new Employee("Bob",...);

swap(a,b);

但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。

在方法结束时,参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象如下图:

6f80d4cf27fa7c381eabfb132b885fa1.png

这个过程说明:java语言对对象采用的不是引用调用,实际上对象引用进行的是值传递。

最后总结一下在JAVA中,方法参数的使用情况:

*一个方法不能修改一个基本数据类型的参数;

*一个方法可以改变一个对象参数的状态(属性);

*一个方法不能实现让对象参数引用一个新对象;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java udp 协议_网络协议 - UDP 协议详解

网络协议 - UDP 协议详解 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。pdai UDP概述UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第…

java线程卡住排查_基于 Java 线程栈 排查问题

除日志外,还有没有别的方式跟踪线上服务问题呢?或者,跟踪并排除日志里无法发现的问题?方法当然是有的,就是通过现场快照定位并发现问题。我们所说的现场,主要指这两方面:Java 线程栈。线程栈是J…

java实验二答案天津商业大学_天津商业大学信息安全实验一

天津商业大学信息安全实验一 1《信息安全技术》实 验 报 告 书实验名称: 实验一Internet应用风险专 业: 电子商务班 级: 1203班姓 名: 代常发学 号: 20124934指导老师: 丁雷信息工程学院2015 年 5 月2目 录…

java前端的日期插件_几个前端时间插件总结

几个前端时间插件总结总结一下几款时间插件,分别是- [ ] jeDate 手册http://www.jemui.com/jedate/- [ ] bootstrap-datetimepicker 下载地址- [ ] My97DatePicker 下载地址- [ ] jQuery UI 插件Datepicker下载地址并没有哪款完全超越另外一款,主要还是看…

Java插件自动保存浏览器书签_多浏览器书签同步插件EverSync

有时上网时会遇到浏览器不能正常显示的问题。(比如我的火狐浏览器无法正确显示微信公众号管理后台,在chrome上可以正常显示),所以我的电脑里安装了chrome和firefox两个浏览器。但是时间长了,会出现两个浏览器上书签不同步的问题。原来自己的解…

php oracle 中文字段,怎么解决php oracle乱码问题

php oracle乱码是由于没有正确的配置字符集信息导致的,其解决办法就是通过PLSQL运行“select * from V$NLS_PARAMETERS;”获取oracle的字符集,并重新设置正确的字符集即可。PHP Oracle 中文乱码问题通常缺省配置连接Oracle在处理中文时都会遇到乱码问题&…

用matlab数学综合实验,MATLAB与数学实验(第2版)

MATLAB与数学实验(第2版)作者:艾冬梅 李艳晴 张丽静 刘琳出版日期:2014年06月文件大小:46.48M支持设备:¥18.00在线试读适用客户端:言商书局iPad/iPhone客户端:下载 Android客户端&#xff1a…

matlab破损皮革定位,matlab-code-of-TDOAFDOa 干扰源定位代码,应该在 的求解过程中有帮助。 276万源代码下载- www.pudn.com...

文件名称: matlab-code-of-TDOAFDOa下载 收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 38 KB上传时间: 2014-05-31下载次数: 25提 供 者: qqq详细说明:干扰源定位代码,应该在干扰源定位的求解过程中有帮助。-code for tdoa and fdoa文件列表(点击判断是否您…

debian 安装php gd2,如何在Debian Linux中为PHP安装Ioncube

在Debian Linux系统中安装PHP Ioncube加载器。 Ioncube用作PHP应用程序的加密和解密实用程序,通过它我们可以保护数据安全。 它还可以限制PHP应用程序执行未授权。 它还有助于加速提供的页面。 IonCube加载器(Ioncube Loaders)用于在Web服务器上运行时解码编码文件。…

php如何输出关联数组的值,php - 如何从PHP关联数组中获取确切的输出 - SO中文参考 - www.soinside.com...

我试图在关联数组上使用foreach循环创建一个html表。这是关于数组的更多细节。$assoc_array array("0" > array("project_id" > "1","emp_id" > "123","emp_name" > "Max","project&…

linux文件属性是什么意思,Linux文件属性

Linux是一种多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux对不同用户访问同一文件的权限做了规定。我们可以使用ls -l命令来显示一个文件的信息:37944FD1-FBEF-4EDC-80BA-B5276F4242A9.png我们…

linux文件赋予755权限,Linux文件和目录的777、755、644权限解释

Linux文件和目录的权限1.文件权限在linux系统中,文件或目录的权限可以分为3种:r:4 读w:2 写x:1 执行(运行)-:对应数值0数字 4 、2 和 1表示读、写、执行权限rwx 4 2 1 7 (可读写运行)rw 4 2 6 (可读写不可运行)rx 4 1 5 (可读可运行不可写)示例…

linux下删除已经创建的数据库,MongoDB 数据库的创建和删除

MongoDB 创建数据库语法MongoDB 创建数据库的语法格式如下:useDATABASE_NAME如果数据库不存在,则创建数据库,否则切换到指定数据库。实例以下实例我们创建了数据库 runoob:>userunoobswitched to db runoob>dbrunoob>如果你想查看所…

支持1050ti显卡的linux系统,NVIDIA 的 GTX1050 Ti 与 GTX1050 显卡登场

一年来都忙着更新全系列显卡家族的 NVIDIA,先从 GTX1080 和 GTX1070 开始,到 GTX1060 和卡王 Titan X,一步一步将整条产品线升级到 Pascal 核心。今天的 GTX1050 和 GTX1050 Ti 则是补上了中低端市场的短板,让 AMD 享受了两个月优…

c语言项开发班级登入系统,c语言--班级管理系统

满意答案dgfetc5832013.12.10采纳率:47% 等级:12已帮助:14710人class student{public:char m_strName[10]; // 姓名int m_nNum; // 学号float m_dScore[4]; // 成绩};void InputScore(student* p, int nNumber){if(nNumber > 10){print…

android 高度百分比,如何在Android中进行百分比高度和宽度?

现在,可以用Guidelines定位百分比值xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"android:layout_width"match_parent"android:layout_height"match_parent&q…

android fragment 弹出对话框,Android中使用Dialogfragment显示对话框

其他注意事项:1、如何设置自己的Dialogfragment没有标题栏?可以通过两种方法来设置 ,一种是使用dialogfragment的setStyle函数,另外就是使用getDialog().getWindow().requestFeature方法,具体代码如下Overridepublic D…

Android7.0 emui主题,全新EMUI5.0基于Android7.0 天生快,一生快!

EMUI5.0是基于Android 7.0开发的全新一代操作系统。 循着神秘古老的爱琴海带来的灵感,EMUI5.0用户界面的设计极其简单干净,令人赏心悦目。 因了解用户习惯而全新改善,EMUI5.0流畅自然的表现不会随时间递减,让生活得心应手&#xf…

在微信公众号中写html代码吗,微信公众号代码编写怎么做

微信公众号编写微信代码,因为有这方面的需要,需要去进行微信公众号代码编写。以下是学习啦小编为您带来的关于微信公众号代码编写,希望对您有所帮助。微信公众号代码编写微信公众平台编辑器不能直接编写微信代码,但是可以通过第三…

html代码在线分析,网站html代码解析

1、什么是HTML文件?HTML中文叫做“超文本标记语言”,一个HTML文件不仅包含文本内容,还包含一些标记,一个HTML文件的后缀名是.htm或者是.html。用文本编辑器(Dreamweaver)就可以编写HTML文件。2、html文件的基本结构:(成…