2017-04-23 50 views
-1

如果需要为局部变量赋予一些默认值,那么为什么java会为本地声明的数组提供默认值。java中数组的默认值是多少?

import java.util.Arrays; 
import java.util.Scanner; 

public class MatrixMultiplication { 

int a; 
int a1[][]=new int[2][2]; 

     public static void main(String[] args) { 

     int a2[][]=new int[2][2]; 
     int b; 

     MatrixMultiplication mm=new MatrixMultiplication(); 
     System.out.println(mm.a); 
     System.out.println(mm.a1[1][0]); 
     System.out.println(b); 
     System.out.println(a2[1][0]); 

    } 

}

像为varible默认值以上代码为0且对于b我们必须setsome值。然后对于a1 [] [],每个元素的dafult值为0.直到这里,一切都被理解为它们具有deafult值,但是由于a2 [] []是局部声明的,所以它的元素不应该默认初始化为java的规则,以便它们是如何被初始化默认情况下,每一个元素为0

+0

对于整数和浮点基元,它是0,对于布尔值“false”,对于所有其他引用类型,它是“null”。 (但是对于局部变量,没有默认值,你调用'new'来创建一个新的对象,这会初始化本地数组,所以这就是元素被设置为0的方式,'new'就是这样。) – markspace

回答

2

但作为A2 [] []是局部声明那么它的元件不应该initialosed通过deaflt

有一个很大的区别一个变量和一个数组入口。

b未初始化是一种常见的编码错误,因此编译器会将其调出。

但是a2被初始化,并且当阵列被分配  — int[](或a2[0])和int(对于a2[0][0])的阵列的内容被设置为默认值的数组元素类型,你的情况。

+0

这就是我所要求的那么为什么在本地声明时将数组初始化为默认值 – Ankit

+0

@Ankit:它与声明的位置无关。你正在积极创建它:'new int [2] [2]'。 –

相关问题