3

人.java

public class Person {
    public String firstName, lastName;

    public Person(String firstName,
            String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFullName() {
        return(firstName + " " + lastName);
    }
}

PersonTest.java

public class PersonTest {
    public static void main(String[] args) {
        Person[] people = new Person[20];              //this line .
        for(int i=0; i<people.length; i++) {
            people[i] = 
                new Person(NameUtils.randomFirstName(),
                        NameUtils.randomLastName());  //this line
        }
        for(Person person: people) {
            System.out.println("Person's full name: " +
                    person.getFullName());
        }
    }
}

在上面的代码中,我们使用了两次“new”。这段代码是正确的还是错误的?第一个用于分配数组。但为什么是第二个?来自讲义。

4

3 回答 3

10

是的,这是正确的。

该行:

Person[] people = new Person[20]

分配数组,其中充满了对nullwhile 行的引用:

new Person(NameUtils.randomFirstName(),
                      NameUtils.randomLastName());  //this line

Person通过实例化类型的对象并在数组中分配引用来填充它[数组] 。

于 2012-04-06T13:49:47.717 回答
10

new Person[20]创建一个可以容纳 20 个Person对象引用的数组。它不会创建任何实际Person对象。

new Person(...)创建一个Person对象。

这里要做出的关键区别在于,与 C 或 C++ 不同,new Person[20]它不会为 20 个Person对象分配内存。该数组不包含实际对象;它只包含对它们的引用

于 2012-04-06T13:50:10.493 回答
2
Person[] people = new Person[20];

只为对象 Person 分配内存(用空值填充)。然后你需要用特定的人填充它(在这个例子中使用随机的名字和姓氏)。

于 2012-04-06T13:51:18.057 回答