package com.mypackage;
import java.util.List;
import java.util.Map;
public class InitializationDemo {
public static void main(String[] args) {
List<String> a, b = null;
List<String> c = null, d = null;
Map<String, String> e, f = null;
Map<String, String> g = null, h = null;
if(c == null){ //line $38: Works no compilation error
// Do Something here
}
if(a == null) { //line #40: compilation error
// Do Something here
}
if(e == null) { //line #44: compilation error
// Do Something here
}
if(g == null) { //line #46 Works no compilation error
// Do Something here
}
}
}
获取“本地变量a可能尚未初始化”。第40行和第44行的编译错误:
我试图在木材下理解它是如何工作的,因此第38行和第46行不表示编译错误,但#40和#44表示编译错误。
答案 0 :(得分:4)
List<String> a, b = null;
这相当于
List<String> a;
List<String> b = null;
这会回答你的问题吗?
答案 1 :(得分:4)
您没有初始化a
,这就是为什么它抱怨它可能尚未初始化。你应该这样做:
List<String> a =null, b = null;
而不是:
List<String> a, b = null;
因为后者相当于:
List<String> a;
List<String> b = null;
答案 2 :(得分:1)
你应该a = null, b = null;
。变量的初始化就像在C语言中一样,每个变量都有自己的值。
答案 3 :(得分:1)
如果您选择一种表示法,您的代码将变得更易读并且更容易处理。因此要么将变量声明为:
List<String> a = null, b = null, c = null, d = null;
或
List<String> a = null;
List<String> b = null;
List<String> c = null;
List<String> d = null;
另一种可能的做法是:
List<String> a, b, c, d;
a = b = c = d = null;
答案 4 :(得分:0)
因为你应该初始化局部变量,局部变量不在对象级别。它只有本地范围。所以它没有初始化对象创建。但是在代码执行中,jvm期望每个字段的值。所以编译器告诉你应该初始化局部变量。