学习笔记-java按值传递

来源:互联网 发布:淘宝上的白酒是真的吗 编辑:程序博客网 时间:2024/05/17 05:07

代码示例

首先看下面的代码,类似如下的代码,编译通过,起初只是觉得很怪,代码的想做的是通过构造器给外部变量赋值。

public class MethodParaCallByValue {    String name;    public MethodParaCallByValue(String name) {        name = this.name;//错误,即使是传递的是可变的对象参数仍然错误;    }}

这里涉及的java知识点就是“java始终按值传递”。
java核心技术中的表述java中方法参数的传递始终使用“按值传递”,java中方法参数的使用情况:
1.一个方法不能修改基本数据类型的的参数;
2.一个方法可以改变对象参数的状态;
3.一个方法不能让对象参数应用一个新的对象;

回顾书中的例子:

    double percent = 10;    public static void tripleValue(double x){        x = 3*x;    }    tripleValue(percent);//执行后percent仍然为10;
    public static void swap(Member x,Member y){        Member temp = x;        x = y;        y = temp;    }    swap(a,b);//无法达到交换的目的,交换的是swap方法内部x、y临时变量的指向,但方法执行完成后x、y丢弃。

简单说就是,被调用的方法中,方法得到的是所有参数值得一个拷贝,方法不可能修改一个基本数据类型参数的实际值和对象参数的指向;

为什么说“java始终是按值传递”

对于基本数据类型来说,按值传递是传递的实际值,这个很好理解;但对于对象类型来说,传递的就是对象变量的指向,怎么说是按值传递呢?

什么是按值调用,什么是按引用调用?(不知道到在哪里能找到准确的学术定义)
按值调用表示方法接受的是调用者提供的值;
按引用调用表示方法接受的是调用者提供的变量地址;

参照了百度百科解释如下:
按值传递参数时,是将实参变量的值复制一个到临时单元中,如果在调用过程中改变了形参的值,不会影响到变量本身,即实参变量保持调用前的值不变;
按地址(引用)传递时,把实参变量的地址传送给被调用地址,形参和实参共用内存同一地址,在被调用过程中,形参的值一旦改变,相应的实参也跟着改变;

看了值传递和引用传递的定义之后,比较好理解了,对java来说,对象参数调用的过程中传递是变量的指向,即变量的值;但按引用传递的是变量的地址,需要注意这里的表述是变量的地址,非变量指向的对象的地址;

0 0
原创粉丝点击