public class StaticTest {
private static List<String> listA;
private static List<String> listB;
static {
listA = new ArrayList<String>();
listA.add("aaa");
setB(listB);
}
public static void main(String[] args) {
System.out.println(listA == null);
System.out.println(listB == null);
}
private static void setB(List<String> listB) {
if (listB == null) {
listB= new ArrayList<String>();
listB.add("bbb");
}
}
}
我不知道为什么listB是空的,谁能详细解释下?
setB方法里面的listB被你重新new了,就和private那个不是同一个对象了,所以listB是空的
因为你方法里面初始化的是方法的参数listB,而不是类的属性listB。
public class test_1 {
private static ArrayList<String> listA;
private static ArrayList<String> listB;
static {
listA = new ArrayList<String>();
listA.add("aaa");
listB = setB(listB);
}
public static void main(String[] args) {
System.out.println(listA == null);
System.out.println(listB == null);
}
private static ArrayList<String> setB(ArrayList<String> listB) {
if (listB == null) {
listB = new ArrayList<String>();
listB.add("bbb");
System.out.println("asdasd");
}
return listB;
}
}
你是在子函数里new的,改变的是子函数里的listB,要把引用传回来再赋值给listB。
setb中new的对象,只是局部变量,不会影响到外面的listB,所以你要想有数据,不要new ,直接用外面的就行
因为被局部变量覆盖了
private static void setB(List<String> listB) {//这里定义的listB覆盖了外部定义的static,把这改成private static void setB(List<String> listB1)
if (listB == null) {
listB= new ArrayList<String>();
listB.add("bbb");
}
}
局部的变量使用完 就回收了