在我的下面的代码中,我遇到了一个问题我无法解决...当我将一个类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;
}
}
答案 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;
}