3

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);
    }
}

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」を 2 回使用しています。このコードは正しいですか、それとも間違っていますか? 最初のものは配列の割り当て用です。しかし、なぜ2番目の?講義ノートからです。

4

3 に答える 3

10

はい、正しいです。

この線:

Person[] people = new Person[20]

行への参照でいっぱいの配列を割り当てnullます:

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

Persontype のオブジェクトをインスタンス化し、配列に参照を割り当てることで [配列] を埋めます。

于 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 (null で埋められる) にのみメモリを割り当てます。次に、特定の人物を入力する必要があります (この例ではランダムな名前と姓を使用)。

于 2012-04-06T13:51:18.057 に答える