为什么下面的代码编译没有错误?

时间:2015-08-06 07:17:03

标签: java arrays

我是java的新手,并试图了解以下内容。数组的长度不一样。代码仍然执行没有任何错误。我不明白为什么。如果有人可以澄清。

public class Practice {
    public static void main(String[] args){

        int [][] a = {{1,2,3},{4,5}};
        a[0] = a[1];
    }
}

3 个答案:

答案 0 :(得分:9)

SmsCom.ExecCommand("AT+CMGS=42<CR>07915892000000F001000B915892214365F7000021493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E" + char.ConvertFromUtf32(26), 300, "Messagenot sent " + Portname + "."); a[0]都是int数组(即它们的类型是a[1]),因此可以将一个分配给另一个,无论它们引用的当前数组的长度如何到。

您的代码与以下代码没有太大区别:

int[]

或者从这段代码:

int [] a = {1,2,3};
int [] b = {4,5}
a = b;

在这两种情况下(如在原始代码中),您正在更改引用类型变量的值以引用其他对象。

答案 1 :(得分:2)

您可以使用与重新分配数组变量相同的方式为数组(a[0] = a[1])分配不同大小的数组:

int[] x = new int[5];
x = new int[6];

因此,由于这是允许的,因此将a[1]分配给a[0]没有问题。

最后,它只是对初始数组所持有的引用的更改。

答案 2 :(得分:1)

与C和C ++不同,Java“数组数组”的行为类似于一维引用数组,每个引用都是对一维数组的引用。最初,

  1. a[0]指的是{1,2,3}
  2. a[1]指的是{4,5}
  3. 引用 a[0]a[1]可以重新分配给int的任何其他数组。因此,重新分配a[0] = a[1]完全有效。