将二维字符串数组分配给一维对象数组

时间:2011-03-14 12:25:48

标签: java arrays

我对此代码感到困惑

String[][] str=new String[2][3];
Object[] obj=str;

编译好。因为Object是超类String是子类

但以下代码会产生错误

class Ex { } 
class Ex1 extends Ex { } 

class ExTest {
  public static void main(String[] args) 
  { 
    Ex1[][] ex1=new Ex1[2][3]; 
    Ex[] ex=ex1; 
  } 
} 

但是此代码会产生错误原因

4 个答案:

答案 0 :(得分:3)

它编译,因为obj现在将包含两个一维String[]个对象。

以下所有内容将编译:

String[][] str = new String[2][3];
Object obj1 = str;
Object[] obj2 = str;
Object[][] obj3 = str;

答案 1 :(得分:1)

所有数组实例也是java.lang.Object的实例。因此,以下所有作业都是合法的。 objArr1数组的元素是一维String数组。

     Object obj1 = new String[3];
     Object obj2 = new int[3];
     Object obj3 = new String[3][3];
     Object[] objArr1 = new String[3][4];

更新:

class Ex { } 
class Ex1 extends Ex { } 
class ExTest {
 public static void main(String[] args) { 
    Ex1[][] ex1=new Ex1[2][3]; 
    Ex1[][][] exArr=new Ex1[2][3][3]; 
    Object obj = exArr; //valid
    Object objArr[] = ex1; // valid assignment. every array instances are also object
    Object[][] obj2Arr = exArr;  // valid 
    Object[][][] obj3Arr = exArr; //valid
    Obejct[][][][] obj4Arr = exArr; //compiler error. obj4Arr is 4 dimensional, whereas exArr is three..
    Ex[] ex=ex1;  // compiler error
    Ex1[] ex1Arr = ex1 ; // compiler error
  } 
} 

即使元素类型相同,也不能为彼此分配不同的维数组。您可以将任何具有任何维度的数组分配给维数小于或等于指定数组维度的Object数组。因为每个数组实例也是Object实例..

答案 2 :(得分:1)

当你意识到java数组时,无论它们具有多少维数,都是有意义的......在IS-A关系方面的对象。因此,对象数组可以容纳几乎任何数组,因为每个数组都是 Object

答案 3 :(得分:0)

首先,我要强调一下:

Object是所有数组类型的直接超类

是单维数组还是多维数

或String数组或任何其他派生类型的数组。

  

我对此代码感到困惑

String[][] str=new String[2][3];
Object[] obj=str;
     

编译好。因为Object是超类String是子类   类

这里假设我们有

Object[] objArray = new Object[2];
objArray[0]= // it can hold something which is of type object
            // as we know String[] IS A Object, so I can assign it here like below
String[] strArray = new String[3];
objArray[0] = strArray ;

这里我将单个维String数组指定为objArray的元素,因此我们可以说objArray可以保存2d String数组,即String[][],即

Object[] objArray = new String[2][];
  

但以下代码会产生错误

 class Ex { } 
class Ex1 extends Ex { } 
class ExTest {
 public static void main(String[] args) 
{ Ex1[][] ex1=new Ex1[2][3]; Ex[] ex=ex1; 
} } 
     

但是此代码会产生错误原因

这是因为ex[0]可以保存一个IS Ex

假设允许Ex[] ex=ex1;

然后ex[0]应该能够保存Ex1

的1D数组
ex[0] = new Ex1[3];// but this can not be possible as Ex1[] IS A Object NOT Ex