neee

导航

Java——值传递与引用传递

1.基本类型和引用类型在内存中的保存

(1)基本类型的变量保存原始值,即它代表的值就是数值本身;

    基本类型在声明变量时就为它分配了空间;

    基本类型在参数传递过程中属于值传递,也就是复制一份数据到参数中。

 

(2)引用类型的变量保存引用值

   ("引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。)

    引用类型在参数传递过程中数据引用传递,也就是将内存地址传过去。

 

2.引用传递和值传递

(1)值传递:

方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法

中的操作都是对形参这个值的修改,不影响实际参数的值。

 

  (2)引用传递:

 

    也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;

 

    在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。

 

 1 public class Test {
 2  public static void main(String[] args) {
 3      Test t = new Test();
 4      int score = 59;//这里传递的参数score就是按值传递
 5           
 6      Numbertest nt = new Numbertest();
 7      nt.num = 59;//这里传递的参数num就是引用传递
 8      
 9      t.addNum(score);
10      System.out.println("3:"+score);
11      
12      t.addNum(nt);
13      System.out.println("4:"+nt.num);
14      
15          
16  }
17  
18  public void addNum(int score) {
19        score++;            //1:60
20 //     score=score++;      //1:59
21 //     score=score+1;
22      System.out.println("1:"+score);
23  }
24  
25  public void addNum(Numbertest nt) {
26      nt.num++;
27      System.out.println("2:"+nt.num);
28  }
29  
30 }
31 
32 
33 
34 public class Numbertest {
35     
36     public int num;
37 
38 }

运行结果:
1:60
3:59
2:60
4:60

此代码运行的结果就是最好的一个例子;

在传递中也许还有更多的影响因素,随着学习的深入就会发现。

 

posted on 2018-08-13 22:18  neee  阅读(135)  评论(0编辑  收藏  举报