`
于宏涛
  • 浏览: 1227 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于java方法参数值传递的理解

阅读更多

      关于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参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。

    Java中的值传递和引用传递

    当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。  值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值  引用传递的特点:方法内部对传...

    java按值传递还是按引用传递详细解说

    这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解...

    Java程序设计基础:方法的值传递.pptx

    方法的值传递 目录 课程导入 理解方法调用时参数的顺序匹配 理解方法调用时值传递 方法调用时,需要提供实参,它们必须与方法签名中所对应的形参次序相同,这称作参数顺序匹配。 参数顺序匹配 public static void ...

    Java零基础-参数传递-2.md

    读者将学习Java中方法调用时的参数传递方式,并重点探讨基本类型和引用类型在参数传递过程中的特点和区别。此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 ...

    为什么Java只有值传递

    我们先看一下值传递和引用传递的概念和区别 值传递:是指在调用函数时将实际参数复制一份传递到函数中,...我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;

    Java零基础-参数传递-1.md

    读者将学习Java中方法调用时的参数传递方式,并分别介绍基本类型和引用类型在参数传递过程中的特点和区别。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和...

    java中参数传递方式详解

    主要介绍了java中参数传递方式详解的相关资料,需要的朋友可以参考下

    Java 零基础方法.md

    给出了方法的定义和调用示例,展示了如何定义一个方法,传递参数并返回一个值。示例代码演示了如何定义一个计算两个整数之和的方法,并通过输出结果展示了方法的调用过程和返回值的使用。通过阅读和理解本文档,读者...

    Java 零基础方法重载.md

    通过输出结果,展示了方法重载的效果,即根据传递的参数类型的不同,选择合适的方法进行计算并返回不同类型的结果。通过阅读和理解本文档,读者可以初步了解方法重载的概念和用法,并能够在实际编程中灵活运用方法...

    java及C++中传值传递、引用传递和指针方式的理解

    为什么 Java 只有值传递,但 C++ 既有值传递,又有引用传递呢?今天我们就来探讨下这个问题,有需要的朋友可以参考下

    图形用户界面java

    2. 理解 Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3. 掌握编写独立运行的窗口界面的方法。 4. 了解 Java Swing 组件的使用方法。 5. 了解对话框的使用方法。 6. 熟练使用图形类 Graphics。 7....

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法大汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解...

    AIC的Java课程1-6章

     掌握定义方法(声明方法)和调用方法,通过参数和返回值传递数据。  理解实际参数与形式参数以及参数类型的提升(隐式转型)。  掌握方法重载(overload)的基本要求。  区别和掌握按值传递与按引用...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法大汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解...

    Java泛型和反射.ppt

    一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为...

    疯狂JAVA讲义

    5.2.2 方法的参数传递机制 116 5.2.3 形参长度可变的方法 120 5.2.4 递归方法 121 5.2.5 方法重载 123 学生提问:为什么方法的返回值类型不能用于区分重载的方法? 124 5.3 成员变量和局部变量 124 5.3.1 成员...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    消息是以参数的形式传递给某方法的。一个消息通常由三部分组成: 1. 消息传送到对象的名称。 2. 要执行的方法的名称。 3. 方法需要的任意参数。 2.2.4 类 类是一个蓝图或样板,定义了某种类型的所有对象的变量...

    为方法传递对象参数&对象数组.pptx

    理解并掌握Java中参数传递方式—值传递 掌握对象数组的创建,理解对象数组元素中的值 掌握对象数组的使用 了解不可变对象和类的概念 ;给方法传递一个对象,是将对象的引用传递给方法的形参(也是同类型的引用变量);...

    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 ...

Global site tag (gtag.js) - Google Analytics