首页 > 编程语言 > 详细

java中的值传递和引用传递

时间:2018-05-06 01:04:10      阅读:258      评论:0      收藏:0      [点我收藏+]

java 参数,不管是原始类型还是引用类型,传递的都是参数的副本。

如果参数类型是原始类型,那么传递的参数是这个参数的一个副本,也就是这个原始参数的值。如果在函数中改变了副本的值,是不会改变原始的值。

如果参数类型是引用类型,那么传递的参数是这个引用参数的一个副本,两个引用同时指向同一个对象的值。如果在函数中没有改变副本的地址,而是改变了

地址的值,那么函数内的改变会影响传入的参数。而如果在函数中改变了副本的地址,如new 一个,那么副本指向一个新的地址,那么传入的参数还是指向原来的地址,

所有不会改变参数的值。而如果在函数中先改变了副本的值,而后又改变了副本的地址,如new 一个,那么副本指向一个新的地址,那么传入的参数还是指向原来的地址,

但是会改变参数的值。

demo1:

 1 public class ValuePass {
 2 
 3          private static int num = 5;
 4 
 5          public static void changeValue(int n) {
 6 
 7                    n = n+2;
 8 
 9                    System.out.println("n="+n);
10 
11          }
12 
13          public static void main(String[] args) {
14 
15                    System.out.println("Before changeValue(), num="+ num);
16 
17                    changeValue(num);
18 
19                    System.out.println("After changeValue(), num="+ num);
20 
21          }
22 
23 }

demo2:

public class ReferencePass {    
    public static void changeSalary(Employ e, double raiseSalary) {
        e.setSalary(e.getSalary() + raiseSalary);
        System.out.println("e.salary="+ e.getSalary());
    }    
    public static void changeSalary2(Employ e, double raiseSalary) {
        e.setSalary(e.getSalary() + raiseSalary);
        e.setSalary(e.getSalary()+1000);
        Employ ee = new Employ();
        ee.setSalary(20000);
        e = ee;
        System.out.println("e.salary="+ e.getSalary());
        System.out.println("ee.salary="+ ee.getSalary());
    }    
    public static void main(String[] args) {
        Employ e = new Employ();
        e.setSalary(10000);
        System.out.println("Before method, e.getSalary()="+ e.getSalary());
        changeSalary(e, 1500);
        System.out.println("After method, e.getSalary()="+ e.getSalary()); 
        changeSalary2(e, 1500);
        System.out.println("After method, e.getSalary()="+ e.getSalary());
    }
}
class Employ {
    private double salary;
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }    
}

 

java中的值传递和引用传递

原文:https://www.cnblogs.com/ellen413/p/8996860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!