Java到底是值传递还是引用传递?

来源:互联网 发布:金融随机分析 知乎 编辑:程序博客网 时间:2024/05/14 20:55

值传递与引用传递:

       Java到底是引用传递还是值传递,之前我看过一些介绍,但是好记性不如烂笔头,时间长了最近看到居然又忘了,所以现在记下来,方便以后查看。

       既然说到值传递和引用传递,那么到底什么才是值传递,引用传递又是什么呢?

       值传递,简单来说就是在操作前对值进行了拷贝,然后两部分操作的就是完全无关的两部分内容了。

public class TempTest {      private void test1(int a){          a = 5;          System.out.println("test1方法中的a="+a);  }      public static void main(String[] args) {          TempTest t = new TempTest();          int a = 3;          t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a          System.out.println(”main方法中的a=”+a);   }  }  

运行结果:

test1方法中的a=5  main方法中的a=3  


       引用传递,同样很简单,就是说传递了对对象的引用,也就是地址。进而操作的就是同一片内容,因而执行改动操作就会真正修改原内容了。

public class TempTest {      void test1(A a){         a.age = 20;          System.out.println("test1方法中的age="+a.age);    }       public static void main(String[] args) {         TempTest t = new TempTest();          A a = new A();          a.age = 10;          t.test1(a);          System.out.println(”main方法中的age=”+a.age);        }  }  class A{          public int age = 0;  }  


运行结果:

test1方法中的age=20  main方法中的age=20  

       至于在Java中到底是值传递还是引用传递,我的想法是这样的:

       Java只有值传递,没有引用传递:普通变量是直接传递的变量的副本,而若是类做参数,则会拷贝栈中的引用地址,指向堆中的同一片地址,操作同一片内容。但是论其本质,还是值传递,毕竟复制了栈中的内存地址嘛


0 0