Java多变量初始化 - 它是如何工作的?

时间:2015-09-28 21:34:52

标签: java

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表示编译错误。

5 个答案:

答案 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期望每个字段的值。所以编译器告诉你应该初始化局部变量。