如图所示我创建了两个list,然后下面将它们放到了方法里面,方法里面我就不截图了,就是调用mybatis的方法,然后进行赋值,我单元测试的时候,进到方法里面,确实赋值了,但是在退出方法的时候,直接又变回了null???
不是引用传递么,为什么感觉变成局部的了??
调用的方法是void无返回值的方法,求解,以前用责任链模式也是对象当参数穿来穿去的,也没出现这种事啊???
如图所示我创建了两个list,然后下面将它们放到了方法里面,方法里面我就不截图了,就是调用mybatis的方法,然后进行赋值,我单元测试的时候,进到方法里面,确实赋值了,但是在退出方法的时候,直接又变回了null???
不是引用传递么,为什么感觉变成局部的了??
调用的方法是void无返回值的方法,求解,以前用责任链模式也是对象当参数穿来穿去的,也没出现这种事啊???
因为你传的是null,null是没有地址的,然后你新new出的对象,对新的对象进行的赋值;
引用传递的意思是把引用的地址传递过去,然后对引用对应的地址的对象进行修改,
因为变量名称与实例的指向关系没变,修改了实例,变量的使用时的内容自然就变了。
你可以先把pList,cList 实例化,然后传入通过add方法进行赋值修改。
不能用=赋值,
你的程序应该是路线1,null是没有地址的,但是如果是路线2的话,可以把p1,p2传递进去赋值
测试代码:
public static void main(String[] args) {
List pList = new ArrayList();
List cList = new ArrayList();
setParams(pList, cList);
System.out.println(pList);
System.out.println(cList);
}
public static void setParams(List<ProductV0> pList, List<ProductV0> cList){
ProductV0 p1 = new ProductV0();
p1.setProId(1);
p1.setProName("bread");
p1.setType("food");
p1.setDesc("delicious");
List<ProductV0> aaa = new ArrayList<ProductV0>();
aaa.add(p1);
pList = aaa;
cList.add(p1);
}
static class ProductV0{
int proId;
String proName;
String type;
String desc;
public int getProId() {
return proId;
}
public void setProId(int proId) {
this.proId = proId;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}