java没有指针,因此也就没有引用传递这一说法,只有值传递,不过可以通过对象来实现引用传递,这种引用传递和指针原生的引用传递不一样:
java值传递:方法调用时,实际参数将它的值传递个形式参数,期间在方法中形式参数的改变并不会改变实际参数的值
java引用传递:也叫做地址传递。传递参数时,形式参数将和实际参数指向同一个地址,相当于实际参数的一个副本,具体实际参数会不会改变需要看操作的方式
java中的引用传递面试题:
Qusetion1:java中有引用传递吗?
Answer1:java中所有的都是值传递,没有引用传递,有些我们看起来类似于C的指针引用传递的只是传递的是地址,仍然是值传递
Question1:如下代码:
public class test{
public static void main(String[] args){
test t = new test();
Integer i1 = new Integer(1);
Integer i2 = i1;
t.fun(t2);
System.out.println(i1.equals(i2));
}
public void fun(Integer i){
i = new Integer(2);
}
}
最终输出的结果为true or false?
Answer2:最终的结果是输出true,其赋值过程如下:
开始创建一个Integer对象:i1----->地区1(new Integer(1))
然后创建一个Integer对象并且指向i1:i2----->i1----->地区1(new Integer(1))
接下来将i2对象传递给方法中的形参i:i----->i2----->i1----->地区1(new Integer(1))
在该方法中重新为i形参赋值:i------>地区2(new Integer(2))
最后的结果如下:
i1----->i2----->地区1(new Integer(1))
i------>地区2(new Integer(2))
最终i1还是和i2指向同一个位置,当把i2实参传递给形参时只是使得形参和实参同时指向一个地址而已,之后在方法中的操作只是改变了形参自己的地址而已,并没有改变原来地址指向的值