Java中的引用传递和值传递

                                Java中的引用传递和值传递

关于Java的引用传递和值传递,在听了老师讲解后,还是没有弄清楚是怎么一回事,于是查了资料,所以在这里与大家分享,有不对的地方,欢迎大家留言。

java中是没有指针的,java中只存在值传递,  我们经常在Java中看到对于对象(也就是数组,类,接口)的传递似乎像引用传递,可以改变对象中某个属性或者变量的值。虽然是值的变化,但是两者是不相同的,实际上这个传入函数的值是对象引用的拷贝,在传递的时候引用的是函数的地址值,所以归根结底还是按值传递。

java中的值传递:

代码如下:

public class ArrayDemdo01{
    public static void change(int a){
        score=50;
    }
    public static void main(String[] args) {
        int score=10;
        System.out.println(score);
        change(score);
        System.out.println(score);
    }
}

其最终结果都为10,传递的是main中值得拷贝,这份拷贝与原值没什么关系

java中的引用传递:

代码如下:

public class ArrayRefDemo02{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
				int Temp[]= {1,5,87};                
				fun(Temp);                             
				for(int i=0;i<Temp.length;i++) {          
					System.out.print(Temp[i]+"、"+"\t");
				}
	}
			public static void fun(int x[]) {		//接受整形数组的引用
				    x[0]=78;          
			}
}

上面程序运行结果为78、,5、,87、。从堆和栈的关系来看,Temp的值分别为1,5,78,在栈内存中Temp传达给fun,在传达给x,x和Temp同时将其传达给同一个空间;x在将第一个值为78,此时这个方法执行完毕后,x就没有用处了,但此时堆内存中的第一个值已经被修改,所以最后的即如果就是78、,5、,87、。

 

 

 

 

 

 

posted @ 2018-07-25 17:31  小沐CA  阅读(143)  评论(0)    收藏  举报