添加到数组的值是NULL?

时间:2015-11-29 15:25:24

标签: java arrays

在我的下面的代码中,我遇到了一个问题我无法解决...当我将一个类Person对象添加到一个数组时,它似乎添加正常,但是当我尝试打印出该对象值表单时指定的数组位置,输出" null。"

这是代码

import java.util.Scanner;
import java.util.Arrays;
import java.lang.String;

public class Main
{
    public static void main(String[] args)
    {
        int ARRAY_LENGTH = 2;

        Scanner in = new Scanner(System.in);
        Person[] Persons;

        Persons = new Person[ARRAY_LENGTH];

        for (int i = 0; i < ARRAY_LENGTH; i++)
        {
            System.out.println("Enter a name to add to the array: ");
            Persons[i] = new Person(in.next());
            System.out.println(Persons[i]);
        }

        Arrays.sort(Persons);

        for (int i = 0; i < ARRAY_LENGTH; i++)
        {
            System.out.println(Persons[i]);
        }
    }
}

&安培;

public class Person implements Comparable<Person>
{
    private String name;

    public Person (String aName)
    {
        String name = aName;
    }

    public String getName()
    {
        return name;
    }

    public int compareTo(Person o)
    {
        Person other = (Person) o;
        if (this.name.equals(o.name))
        {
            return 0;
        }
        if (this.name.compareTo(o.name) < 0)
        {
            return -1;
        }
        return 1;
    }

    @Override
    public String toString()
    {
        return name;
    }
}

3 个答案:

答案 0 :(得分:3)

不,它没有将null添加到数组中。它引用了数组中的Person对象,当您在toString()对象上调用Person时,它返回name字段的值...始终是null,因为这个构造函数:

public Person (String aName)
{
    String name = aName;
}

这不是为name字段赋值 - 它声明了一个名为name的局部变量。 (我希望有一个像样的IDE可以发出警告。)

你想:

public Person (String aName)
{
    name = aName;
}

答案 1 :(得分:2)

构造函数

public Person (String aName)
{
    String name = aName;
}

将名称存储在本地变量中。

将此更改为

public Person (String aName)
{
    this.name = aName;
}

答案 2 :(得分:0)

构造函数错误

public Person (String aName)
{
    String name = aName;
}

它正在创建一个新变量,而不是正确分配字段。

尝试删除类型声明:

public Person (String aName)
{
    name = aName;
}