为数组分配然后使用构造函数

oiy*_*yio 3 java arrays constructor allocation

Person.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ami*_*mit 10

是的,这是正确的.

这条线:

Person[] people = new Person[20]
Run Code Online (Sandbox Code Playgroud)

分配数组,充满对null行的引用:

new Person(NameUtils.randomFirstName(),
                      NameUtils.randomLastName());  //this line
Run Code Online (Sandbox Code Playgroud)

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


Tay*_*mon 10

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

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

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