问题描述
- 有关Java static的疑问(凑字数的...)
-
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是空的
解决方案二:
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。
解决方案三:
因为你方法里面初始化的是方法的参数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");
}
}
解决方案六:
局部的变量使用完 就回收了
时间: 2024-10-31 16:45:37