值传递和引用传递

来源:互联网 发布:linux service status 编辑:程序博客网 时间:2024/05/17 22:07

值传递(形参类型是基本数据类型):方法调用时,实参把它的值传给形参形参只是用实参的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形参值的改变不影响实参的值。

引用传递(形参类型是引用数据类型参数):方法调用时,实参是对象(或数组),这时实参形参指向同一存储单元因此对形参的修改实际就是对实参的修改。


下面举例说明:
传值---传递基本数据类型参数 
public    class      PassValue{ 
    static void exchange(int a, int b){
        int temp;
        temp = a; a = b;b = temp;
    }
    

引用传递---对象作为参数
如果在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用,即在方法调用时,实参把对对象的 引用(地址)传递给形参。这是实参形参指向同一个地址,即同一个对象(数组),方法执行时,对形参的改变实际上就是对实参的改变, 这个结果在调用结束后被保留了下来。 
class Book{
    String name;private folat price;
    Book(String n,  float ){ 
      name = n;price = p;
    }
    static void change(Book a_book, String n,  float p){
       a_book.name = n; a_book.price = p;
    }
}
 public class PassAddr{
    public static void main(String [] args){
        Book b = new Book("java2",  32.5f);
        b.change(b, "c++", 45.5f);     //传递对象b的引用,修改对象b的值 
    }
}
运行结果:
        before   call:  name:java2   price:32.5
        after   call:   name:c++     price:45.5

二、注意:

(1)String、Integer、Long等不可变类按照“引用传递”见面试宝典92页例子


原创粉丝点击