public class Test4 {
Vector v = null;
public Test4(){
newVector(v);
}
public void newVector(Vector v){
v = new Vector();
}
public static void main(String[] args) {
Test4 t = new Test4();
System.out.println(t.v == null);
}
}上面的方法,不是引用传递吗 ? 怎么打印结果为true
求解释到底什么才是引用传递
void newVector(Vector ** v){
*v = new Vector();
}
等价于
void newVector(Vector * & v){
v = new Vector();
}函数参数传进来是临时变量,临时变量的值copy了你的参数值,所以在函数内部赋值后不能返回。
如果需要返回,需要是指向指针的指针(第一个例子),或者是引用(第二个例子),但是java的引用和c++的引用概念不同,java的引用可以理解为指针
Test4 t = new Test4();
t.newVector(new Vector());
System.out.println(t.v == null);但这样结果仍然会是true
因为newVector()方法中被赋值的v和参数同名,它被编译器理解为参数变量v,所以实例变量v仍然不会被赋值
v = new Vector();
}
public class Test4 {
Vector vector = null;
public Test4(){
newVector(vector);
}
public void newVector(Vector v){
v = new Vector();
}
public static void main(String[] args) {
Test4 t = new Test4();
System.out.println(t.vector == null);
}
}不是不是。。
我的意思是想把成员变量vector传到newVecor方法里面。在newVecor方法里面是直接对成员变量vector操作。
在出了newVector方法以后,成员变量vector就被初始化了。
能通过修改newVector方法实现吗?
好,你把成员变量名从v改成了vector,这样看就清楚多了。
你可以这么理解
vector可以看作个指向成员变量实例的引用
在newVector方法中传进来的v也是个指向成员变量实例的引用
即在刚进入方法时2个引用指向同一个实例对象
然后v=new Vector()改变了v这个引用的值,令v指向一个新建的Vector
此时vector仍指向原来的成员变量实例
现在有两个引用,指向两个实例,所以t.vector仍然是null
成员变量 vector是一个引用,传入newVector方法中的时候把自己复制了一份名字叫做v
这个时候vector和v是两个引用,因为v是vector复制的,所以都指向null
方法完成之后
v引用指向了new Vector()对象
但是vector还是指向null
因为他们是不同的引用标识同时由于没有任何地方会再用到v引用的new Vector()对象
所以他会被垃圾清理掉
public class Test
{
Test4 t;
private Test()
{
t = new Test4();
newVector(t);
}
public void newVector(Test4 t)
{
t.v = new Vector();
}
public static void main(String[] args)
{
Test t1 = new Test();
System.out.println(t1.t.v==null);
}
}class Test4
{
Vector v = null;
}
Vector v = null;
public Test4(){
newVector(v);
}
public void newVector(Vector gagaga){ // 此处是gagaga
gagaga = new Vector();
}
public static void main(String[] args) {
Test4 t = new Test4();
System.out.println(t.v == null);
}
}这样t.v仍然是null
其实你的代码只要加个this就是false了public class Test4 {
Vector v = null;
public Test4(){
newVector(v);
}
public void newVector(Vector v){
this.v = new Vector();// 此处加个this
}
public static void main(String[] args) {
Test4 t = new Test4();
System.out.println(t.v == null);
}
}楼主有兴趣的话,可以看下我博客
http://blog.csdn.net/niuniu20008/article/details/2953785