关于Java方法参数是值传递还是参数传递,我们首先明确是值传递。先看一下下面的例子:
1、定义方法tripleValue(double x)
public void tripleValue(double x){//将参数值增加三倍
x=3*x;
}
下面调用这个方法:
double percent = 10;
tripleValue(percent);
调用结束后percent的值仍然是10,并没有发生改变。
因为方法调用的执行过程是:
1)、x被初始化为percent值的一个拷贝(也就是10)
2)、x被乘以3之后等于30。但是percent仍然是10。
3)、这个方法结束后,参数变量x不再使用
2、给方法tripleValue传递一个对象引用类型的参数
现在有一个雇员类Employee。这个类的raiseSalary(double salary)方法可以将某个雇员对象的薪资增加。
我们实现一个这样的方法tripleValue(Employee x)。
public void tripleValue(Employee x){
x.raiseSalary(200);
}
下面调用这个方法
harry = new Employee();
tripleValue(harry);
调用结束我们会发现harry的工资增长了!
好了,到这我们也许会想,这不就是引用传递吗,harry指向的对象的属性值发生变化了呀。其实不是这样的,我们再看一下方法调用的过程:
1)、x被初始化为harry值的拷贝,这里是一个对象的引用。
2)、raiseSalary方法应用于这个对象引用。x和harry同时引用的那个Employee对象的薪金提高了200。
3)、方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪资增加200的雇员对象。
可见参数是对象引用时,仍然是值传递。
3、再看一个说明java参数传递是值传递的例子:
编写一个交换两个雇员对象的方法:
public void swap(Employee x , Employee y){
Employee temp = x;
x = y;
y = temp;
}
如果java对对象采用的是引用调用,那么这个方法就应该能够实现交换数据的效果:
Employee a = new Employee();
Employee b = new Employee();
swap(a,b);
但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。最终白费力气,在方法结束时参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象。
这个过程说明:java对对象采用的不是引用传递,实际上,对象引用进行的是值传递。
下面总结一下在java程序设计语言中,方法参数的使用情况:
1)、一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)。
2)、一个方法可以改变一个对象参数的状态。
3)、一个方法不能实现让对象参数引用一个新的对象。
C++有值调用和引用调用,引用参数标有&符号。可以实现tripleValue(double & x)方法或swap(Employee & x , Employee & y)方法实现修改他们的引用参数的目的
相关推荐
关于Java参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。
当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。 值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值 引用传递的特点:方法内部对传...
这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解...
方法的值传递 目录 课程导入 理解方法调用时参数的顺序匹配 理解方法调用时值传递 方法调用时,需要提供实参,它们必须与方法签名中所对应的形参次序相同,这称作参数顺序匹配。 参数顺序匹配 public static void ...
读者将学习Java中方法调用时的参数传递方式,并重点探讨基本类型和引用类型在参数传递过程中的特点和区别。此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 ...
我们先看一下值传递和引用传递的概念和区别 值传递:是指在调用函数时将实际参数复制一份传递到函数中,...我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;
读者将学习Java中方法调用时的参数传递方式,并分别介绍基本类型和引用类型在参数传递过程中的特点和区别。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和...
主要介绍了java中参数传递方式详解的相关资料,需要的朋友可以参考下
给出了方法的定义和调用示例,展示了如何定义一个方法,传递参数并返回一个值。示例代码演示了如何定义一个计算两个整数之和的方法,并通过输出结果展示了方法的调用过程和返回值的使用。通过阅读和理解本文档,读者...
通过输出结果,展示了方法重载的效果,即根据传递的参数类型的不同,选择合适的方法进行计算并返回不同类型的结果。通过阅读和理解本文档,读者可以初步了解方法重载的概念和用法,并能够在实际编程中灵活运用方法...
为什么 Java 只有值传递,但 C++ 既有值传递,又有引用传递呢?今天我们就来探讨下这个问题,有需要的朋友可以参考下
2. 理解 Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3. 掌握编写独立运行的窗口界面的方法。 4. 了解 Java Swing 组件的使用方法。 5. 了解对话框的使用方法。 6. 熟练使用图形类 Graphics。 7....
7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法大汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解...
掌握定义方法(声明方法)和调用方法,通过参数和返回值传递数据。 理解实际参数与形式参数以及参数类型的提升(隐式转型)。 掌握方法重载(overload)的基本要求。 区别和掌握按值传递与按引用...
7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法大汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解...
一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为...
5.2.2 方法的参数传递机制 116 5.2.3 形参长度可变的方法 120 5.2.4 递归方法 121 5.2.5 方法重载 123 学生提问:为什么方法的返回值类型不能用于区分重载的方法? 124 5.3 成员变量和局部变量 124 5.3.1 成员...
消息是以参数的形式传递给某方法的。一个消息通常由三部分组成: 1. 消息传送到对象的名称。 2. 要执行的方法的名称。 3. 方法需要的任意参数。 2.2.4 类 类是一个蓝图或样板,定义了某种类型的所有对象的变量...
理解并掌握Java中参数传递方式—值传递 掌握对象数组的创建,理解对象数组元素中的值 掌握对象数组的使用 了解不可变对象和类的概念 ;给方法传递一个对象,是将对象的引用传递给方法的形参(也是同类型的引用变量);...
5.6.8 方法参数及其传递问题144 5.6.9 理解main方法语法及命令行参数147 5.6.1 0递归算法147 5.7 this关键字148 5.8 JavaBean149 5.9 包150 5.9.1 为什么需要包?150 5.9.2 如何创建包151 5.9.3 编译并生成包:151 ...