2013-10-17 53 views
3

以下是有效的数组声明的方式不同为什么p在“int q [],p [];”是一个二维数组?

int p[]int []pint[] p和假设我们写int x,y则x和y的类型是整数,但是当我写int []q, p[];为什么编译器说,p是一个二维数组

请参阅下面

public class some { 
    int []q, p[]; 
    void x() { 
     p=new int[10][3];// this is valid 
     //p=new int[10];// compiler expects p as 2d array 
     q=new int[10]; 
    } 
    public static void main(String args[]) 
    { 

    } 
} 
+0

[array in java](http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.2) –

回答

6

注意区别,在Java代码中,当你写:

int[] q, p[]; 

然后qint[]pint[][]

因为它就像写:

int[] q; 
int[] p[]; 

但是,当你写

int q[], p[]; 

然后qint[]pint[]

这就是为什么你应该小心。

Java允许int array[]只是为了让C程序员感到快乐:)

另一件事要注意:

int[] happyArray1, happyArray2; 
int happyArray[], happyInt; 

澄清

当你写int a, b那么很明显那ab都是int s。这样想一想:你在ab上“申请”int

但是如果你有int[] a, b[],那么你在两个ab[]“应用” int[]!所以你得到那aint[],但bint[][]

+0

但我的问题是int [] q,p [] – SpringLearner

+0

@javaBeginner我知道,我想我解释说.. – Maroun

+0

,但你解释为int [] q,p [] – SpringLearner

10
​​

这可以写成

int[] q; 
int[] p[]; // This is effectively a 2d array and that is why compiler gives that error. 

这就是为什么你需要按照申报阵列中的任何1种样式。

样式1int[] arr; // This is the general preference is Java

风格2int arr[]; // I remember using this style when working in C++

,而不是两者结合起来,这是最有可能会得到你眼花缭乱。和Jon rightly commented一样,始终按照第一种方式推荐。

+0

但是,请不要按照第二种风格 - 它只是C的一个倒退,不推荐。 –

+0

@JonSkeet - 用你的建议更新了答案!:) – SudoRahul

相关问题