关于Java中值传递还是引用传递的问题解析-------引用校招笔试中的一道题进行解释
值传递和引用传递在我做校招准备的时候,困扰了我很久,每次碰到都害怕,后来接触多了,好像慢慢也懂了,本文不想过多的用专业的术语去解释到底是值传递还是引用传递,还是只有值传递,只想能够梳理清楚解题时的思路,因而写下这篇文章,也当做是笔记,供自己复习。
首先上题目,问输出什么?
class Value{
public int i=15;
}
public class Test{
public static void main (String argv[]){
Test t= new Test ( );
t.first ( );
}
public void first( ){
int i= 5; //注意这个i是局部变量
Value v= new Value( );
v.i=25; //创建了一个Value对象,并把此对象的属性i赋值25(默认值为15)
second(v,i); //v (v中的属性i值为25) 和 局部变量i 传进函数second
System.out.println(v.i);//v的属性i在second函数中被改为了20
}
public void second(Value v1,int i){
i = 0; //second函数中的局部变量,和之前的i没关系
v1.i = 20;//将传进的V的属性i改为20
Value val = new Value( );
v1 = val; //新创建的Value对象val,属性i值为15,并将v指向val对象,v已经和之前传进来的对象没关系了
System.out.println(v1.i+" "+i); //此时v的属性i为15,先输出 15(v.i) 0(i)
}
}
