java 值传递简单透彻理解

来源:互联网 发布:沙发什么意思网络语言 编辑:程序博客网 时间:2024/06/16 04:27

值传递 以及 引用传递简单 介绍。

值传递         指的是在方法调用时,传递的参数是按值的拷贝传递 (传递前 和传递后 对象的引用不变  java 中基本数据类型以及对应的 包装类 经过方法传递是 值不会改变)

引用传递     指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存 空间的地址 (java 中类似于句柄值,对象类经过方法后 引用地址不改变)

java 中只有值传递 没有引用传递 一下是代码证明 附件简单说明


package com.lyh.za.test.project;
public class TestB {
public static void main(String[] args) {
TestA a = new TestA();
System.out.println(a);
testChange(a);
System.out.println(a);
}
public static TestA testChange(TestA a) {
a = new TestA();//改变对象的引用
return a;
}

}

输出结果

com.lyh.za.test.project.TestA@15db9742
com.lyh.za.test.project.TestA@15db9742

有以上结果值  如果java 是引用传递 在方法 testChange中我们改变了 对象的引用  输出 结果应该是 新的引用。


基本的数据类型以及包装类的简单证明 

public class TestB {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        testChange(a, b);
        System.out.println(a + "," + b);
        Integer a1 = 30;
        Integer b1 = 40;
        testChange(a1, b1);
        System.out.println(a1 + "," + b1);
    }


    public static void testChange(int a, int b) {
        a = a + b;
        b = a - b;
    }


    public static void testChange(Integer a1, Integer b1) {
        a1 = new Integer(3);
        b1 = new Integer(1);
    }


}

结果如下

10,20
30,40

由此可知 通过方法的调用并没有改变 对象的引用  由此值 java 里面只用值传递


0 0