精华内容
下载资源
问答
  • Java方法参数传递

    2017-04-02 14:32:06
    Java方法参数传递

    Java方法参数传递

    程序设计语言中有关将参数传递给方法的专业术语:

    • 按值调用(call by value)表示方法接收的是调用者提供的值。
    • 按引用调用(call by reference)表示方法接受的是调用者提供的变量地址。

    一个方法可以修改传递引用所对应的的变量值,而不能修改传递值调用所对应的的变量的值。Java程序设计语言总是采用按值调用。也就是说,方法得到是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。下面是一个例子:

    public class ParamTest {
    
        public static void main(String[] args) {
    
            /*
            Test 1: Methods can't modify numeric parameters
             */
            System.out.println("Testing tripleValue:");
            double percent = 10;
            System.out.println("Before: percent=" + percent);
            tripleValue(percent);
            System.out.println("After: percent=" + percent);
    
            /*
            Test 2: Methods can change the state of object parameters
             */
            System.out.println("\nTesting tripleSalary:");
            Employee harry = new Employee("Harry", 5000);
            System.out.println("Before: salary=" + harry.getSalary());
            tripleSalary(harry);
            System.out.println("After: salary=" + harry.getSalary());
    
            /*
            Test 3: Method can't attach new object to object parameters
             */
            System.out.println("\nTesting swap:");
            Employee a = new Employee("Alice", 7000);
            Employee b = new Employee("Bob", 6000);
            System.out.println("Before: a=" + a.getName());
            System.out.println("Before: b=" + b.getName());
            swap(a, b);
            System.out.println("After: a=" + a.getName());
            System.out.println("After: b=" + b.getName());
    
        }
    
    
        private static void tripleValue(double x) { // does't work
            x *= 3;
            System.out.println("End of method: x=" + x);
        }
    
        private static void tripleSalary(Employee x) {  // works
            x.raiseSalary(200);
            System.out.println("End of method: salary=" + x.getSalary());
        }
    
        private static void swap(Employee x, Employee y) {
            Employee temp = x;
            x = y;
            y = temp;
            System.out.println("End of method: x=" + x.getName());
            System.out.println("End of method: y=" + y.getName());
        }
    }

    运行main()方法后得到的输出是:

    Testing tripleValue:
    Before: percent=10.0
    End of method: x=30.0
    After: percent=10.0
    
    Testing tripleSalary:
    Before: salary=5000.0
    End of method: salary=15000.0
    After: salary=15000.0
    
    Testing swap:
    Before: a=Alice
    Before: b=Bob
    End of method: x=Bob
    End of method: y=Alice
    After: a=Alice
    After: b=Bob

    方法参数共有两种类型:

    • 基本数据类型(数字、布尔值)
    • 引用类型

    在 Test1 中,percent的值为10,然后调用 tripleValue(double x) 方法:
    1). x被初始化为percent值的一个拷贝(也就是10)。
    2). x被乘以3后等于30。但是percent仍然是10。
    3).这个方法结束后,参数变量x不再使用。

    因此,一个方法不可能修改一个基本类型的数据的参数。而对象引用就不同了,在方法 tripleSalary(Employee x) 被调用时:
    1). x被初始化为harry值的拷贝,因为harry是一个对象的引用,所以此时x和harry引用同一个雇员对象。
    2). raiseSalary 方法应用于对象引用x。x和harry同时引用的那个Employee对象的薪金提高了200%。
    3). 方法结束后,参数变量不再使用。当然,对象变量harry继续引用那个薪金增至3被的雇员对象。
    所以,方法 tripleSalary(Employee x) 得到的是对象引用的拷贝,对象引用及其拷贝同时引用同一个对象,因此可以改变对象参数状态。

    Test3 是一个反例,如果Java采用的是引用调用,那么方法 swap(Employee x, Employee y) 就应该能实现交换数据的效果。但是,最终白费力气。这个过程说明,Java对对象采用的不是按引用调用,实际上,对象引用是按值传递的。

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

    • 一个方法不能修改一个基本数据类型的参数。
    • 一个方法可以改变一个对象参数的状态。
    • 一个方法不能让对象参数引用一个新的对象。
    展开全文
  • java方法参数传递

    2010-12-06 10:01:08
    java方法参数传递面试题三则 发表于: java | 作者: darkmi | 日期: 2010/11/28 11:11 标签: java方法,引用类型 题目1: 写出以下程序的输出内容。 public class Test { public static void changeValue(int...
    java方法参数传递面试题三则
    发表于: java | 作者: darkmi | 日期: 2010/11/28 11:11
    标签: java方法,引用类型
    题目1: 写出以下程序的输出内容。

    public class Test {

    public static void changeValue(int value){
    value = 0;
    }

    public static void main(String[] args) {
    int value = 2010;
    changeValue(value);
    System.out.println(value);
    }
    }
    求输出结果。

    答案:

    2010
    这个题目考察了java方法的参数传递问题。java中方法的参数传递为值传递,不管这个参数是基本类型还是引用类型,我们传递过去的都是该值的一个副本,这个副本作为方法的局部变量保存在栈(stack)中。

    对于上面的 changeValue() 方法,传递进来的是变量 value 的一个副本,在 changeValue() 方法中修改的只是该方法的一个局部变量,不会影响作为参数传进来的那个变量,两者井水不犯河水。

    题目2: 写出以下程序的输出内容。

    public class Test {

    public static void changList(List list){
    list.add("bbb");
    }

    public static void main(String[] args) {
    List list = new ArrayList();
    list.add("aaa");
    changList(list);
    System.out.println(list.size());
    }

    }
    答案:

    2
    说明:
    main()方法在调用changeList()方法的时候,changList()方法中的list变量是main()方法list变量的副本,这两个list变量都指向heap中的同一ArrayList对象,因此操作的也是同一对象。

    题目3:写出以下程序的输出内容。

    public class Test {

    public static void changString(String str){
    str = str + "bbb";
    }

    public static void main(String[] args) {
    String str = "aaa";
    System.out.println(str);
    }

    }
    答案:

    aaa
    说明:
    changString()方法仅仅使本地变量str指向了一个全新的字符串对象”aaabbb”,对main()方法中的str变量没有任何影响。

    某网友对java方法参数传递的总结:

    基础数据类型(int,char,……)传值,对象类型(Object,数组,容器……)传引用。

    有说java方法参数都是传值的,理解方式不同而已。引用本身也是值(对象地址)。

    传值方式,传递的是值的副本。方法中对副本的修改,不会影响到调用方。

    传引用方式,传递的是引用的副本。此时,形参和实参指向同一个内存地址。对引用副本所指向的对象的修改,如修改对象属性、容器内容等,会影响到调用方。对引用副本本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方。

    只要知道传引用时,也是传递的引用的副本,就比较容易理解了。

    以上内容来源:http://blog.csdn.net/flyjimi/archive/2008/07/11/2638662.aspx
    展开全文
  • 主要介绍了Java方法参数传递如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Java方法参数传递机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Java方法参数传递方式只有一种: 值传递,即将实际参数的副本传入方法内,而参数本身不受影响. 基本数据类型, 就是数据类型的复制品; 引用参数类型, 就是引用本身. ...

    Java方法参数传递方式只有一种: 值传递,即将实际参数的副本传入方法内,而参数本身不受影响.

    1. 基本数据类型, 就是数据类型的复制品;
    2. 引用参数类型, 就是引用的复制品.
    展开全文
  • java方法参数传递问题

    2021-01-21 15:55:40
    java方法在进行参数传递的时候,如果参数的类型是基本类型的话,在具体的方法实现中,接受到的就是参数传递过来的值的拷贝(副本),当我们堆副本数据进行任何的操作都不会对原数据有任何的影响,比如以下例子,这...

    基本类型参数

    java中方法在进行参数传递的时候,如果参数的类型是基本类型的话,在具体的方法实现中,接受到的就是参数传递过来的值的拷贝(副本),当我们堆副本数据进行任何的操作都不会对原数据有任何的影响,比如以下例子,这个方法接受两个int类型的 参数,在方法体中进行值的交换。当方法执行完成之后,并对原先数据起作用。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述本质上这里进行值的交换的知识a和b的副本,方法体执行完之后,对a和b本身没有任何的影响。

    引用类型参数传递

    在方法中如如果参数的类型是对象时,这就称为引用类型的参数,但是在进行参数传递时,本质上也是讲对象本身的副本传递过来。但是这里对副本的操作在一定情况下就会对对象本身有一定影响。当我们实例化对象的时候,会在栈中保存一个对象的引用,该应用指向的是对空间中的某一快空间的地址,当我们访问该对对象的数据时,本质上也是通过对象引用的方法,拿到堆空间中相应的数据。
    所以当参数类型是引用类型的时候,虽然在方法中获取到的是引用类型数据的副本,但是他们却是指向着同一块堆中的内存,所以当我们堆副本引用数据修改的时候就会修改堆中相应的数据,所以就简洁的修改了引用对象本身的数据的值。
    在这里插入图片描述在这里插入图片描述下面为了验证 java中引用类型的参数也是值传递
    在这里插入图片描述在这里插入图片描述在这里插入图片描述 如果方法体中不是值传递那么而是引用传递,那么在进过方法体中引用的交换之后,输出的结果因该是10和20但是结果却不是我们想的那样,结果依然没有任何的改变,所以在方法体中进行的就是值传递,参数接受的是值的副本。
    * 总结
    在java中方法进行参数传递时,本质上都是进行参数的copy,然后使用copy进行数据的一些操作,所以在java中的参数传递全部都是值传递,只是这个值有些可能是对象的引用而已。

    展开全文
  • Java方法参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参 形参是引用数据类型:将实参引用...
  • Java方法参数传递机制

    2019-05-06 11:48:03
    Java方法参数传递只有一种:值传递。就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。 1、基本类型参数传递 public class valueTransmit { public static void main(String[] ...
  • Java方法参数传递特性

    2019-03-19 20:04:56
    **Java函数的参数传递方式: ** A. 是按值传递的? B. 按引用传递的? C. 部分按值部分按引用? 按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变...
  • java方法参数传递方式

    2017-07-16 21:34:48
    问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?   答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被...
  • java方法参数传递方式--按值传递、引用传递

    万次阅读 多人点赞 2017-12-25 21:33:28
    java方法参数传递方式有两种,按值传递和引用传递 1.按值传递
  • Java方法参数的使用情况: 一个方法不能修改一个基本数据类型(int、double、bool等)的参数。 一个方法不能让对象参数(数组)引用一个新的对象。 一个方法可以改变一个对象(数组)参数的状态。
  • Java方法参数传递方式

    2017-08-01 10:11:49
    Java基础 程序设计语言中有关将参数传递方法(这里就说2种): 1.call by value 值调用 2.call by reference 引用调用
  • Java方法参数传递问题

    2018-09-12 20:00:58
    参数传递的问题从C语言开始就一直追随我们,最近本人在最准备校招面试,发现他还是如蛆附骨,如影随形。所以我们有必要和他一决高下了。 参数传递在我学习C语言的时候知道了两种,一种是传值,一种是传地址(其实...
  • 1.1 引用数据类型作为方法参数 引用数据类型: 数组,类,接口,枚举 public class Demo01 { // 程序的入口 public static void main(String[] args) { Person p = new Person(); p.name = "abc"; System.out....
  • JAVA方法参数传递方式

    2018-03-22 19:16:39
    从以上例题可以总结Java方法参数的使用情况( 以上内容均参考:java核心技术 卷1 第十版 4.5节 ): 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。 一个方法可以改变一个对象(数组)参数的状态...
  • 在通常的说法中,方法参数传递分为两种,值传递和引用传递,值传递是指将实际参数复制一份传递到方法中, 在方法中的改动将不会影响到实际参数本身,而引用传递则是指传递的是实际参数本身,在方法中的改动将会...
  • java方法参数传递方式有两种,按值传递和引用传递 1.按值传递 参数类型是int,long等基本数据类型(八大基本数据类型),参数传递的过程采用值拷贝的方式 代码片段1: public class Test { public static void ...
  • JAVA方法参数传递详解

    2016-11-16 09:53:44
    我们首先要知道的是JAVA方法参数传递的时候并不是真的把变量里的值传给形参,而是把变量的复制值传给形参,所以第一个传给change()方法的是形参,实质的变量还是没变。 再来看第二个例子,我们在main方法里面新建...
  • 序 在写了一堆叫做“JAVA” “ 方法”的代码后,调试时,发现数据竟然和...以下这篇文章并未说得非常清楚,还是有些内容未说,比如对象为空时,有需要再另外查询吧,以下是全文: 正文 JAVA方法参数传递技巧!! 
  • 也就是,方法得到的是所有参数值的一个拷贝,而且方法不能修改传递给他的任何参数变量内容。 对于基本数据类型来说,直接拷贝了一份参数进行操作,所以不会对传进去的参数有什么影响。 对于对象的引用来说,拷贝的...
  • Java方法参数传递方式只有一种:值传递。值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。  public class PrimitiveTransferTest  {  public static void swap...
  • 该篇文章根据知乎用户[Intopass]回答...方法传递其实就是一个变量赋值给另一个变量的过程。基本数据类型赋值传递的是值本身,其他对象赋值传递的是引用。结果验证首先看第一个程序(按值传递): int num = 100; pub

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,227
精华内容 5,290
关键字:

java方法参数传递

java 订阅