只是声明对象数组和实际创建它的实例有什么区别?

问题描述 投票:1回答:2

为什么第一个语句输出“nothing1”而第二个语句不输出?如果我没有错,那么在语句second中新创建的对象数组具有默认引用null。

class Solution
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Animal temp1[]=null;//statement first;
        if(temp1==null)
           System.out.println("nothing1");
        Animal temp2[]=new Animal[5];//statement second;
        if(temp2==null)
           System.out.println("nothing2");
    }
}
class Animal
{
    int name;
    int action;
    public Animal(int name, int action) {
        this.name = name;
        this.action = action;
    }
}
java arrays object
2个回答
3
投票

第一个声明

Animal temp1[]=null;

声明一个数组变量并将其初始化为null。因此打印“nothing1”。

第二个声明

Animal temp2[]=new Animal[5];

声明一个数组变量并将其初始化为长度为5的数组。此数组的元素(如temp2[0])最初都是null,但数组引用本身(temp2)不为null。因此不打印“nothing2”。


0
投票

在第一种情况下,数组尚未分配任何内存,但在以后的情况下,您已初始化了数组,因此需要一些内存块进行初始化,因此它的引用现在将指向一个内存位置,并且不会为null

© www.soinside.com 2019 - 2024. All rights reserved.