0

请帮助我了解为什么下面的代码会得到奇怪的输出.....为什么 getName() 会为空。

输出 :

列表检查:null:1

public class ListTest
{
public static void main(String args[])
{
    List<Movie> lst = new java.util.ArrayList<Movie>();
    lst.add(new Movie("move1", "genre1"));
    System.out.println("List Check :" + lst.get(0).getName() + ":"
                    + lst.size());
}
}

class Movie
{
private String name;
private String genre;

public Movie(String name, String genre)
{
    name = this.name;
    genre = this.genre;
}

public String getName()
{
    return name;
}

public void setName(String name)
{
    this.name = name;
}

public String getGenre()
{
    return genre;
}

public void setGenre(String genre)
{
    this.genre = genre;
}

}
4

6 回答 6

4

这是错误的:

public Movie(String name, String genre)
{
    name = this.name;
    genre = this.genre;
}

应该

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}

就像在二传手一样。

于 2013-05-23T15:24:46.587 回答
1

局部变量,namegenre在 的构造函数中被分配给同名的全局变量名MovieObject类型的默认值是null这些变量保持未赋值。更正后的构造函数应显示为

public Movie(String name, String genre) {
   this.name = name;
   this.genre = genre;
}
于 2013-05-23T15:24:40.233 回答
1

您使用 this.name 分配参数应该是其他方式

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
于 2013-05-23T15:25:11.697 回答
1

你的构造函数错了,应该是

public Movie(String name, String genre)
{
    this.name = name;
    this.genre = genre;
}
于 2013-05-23T15:25:24.757 回答
0

雷默斯说得对。

“this”指的是类本身,所以“this.genre”指的是类变量“genre”。

切换它们以解决问题。

于 2013-05-23T15:27:44.583 回答
0

当您编写 name = this.name 时,您将 this.name 的值分配给 name。因此,在您的情况下, this.name 在初始化时为空,并且您将其分配给名称。

使用您在 bean 中编写的 getter 和 setter 是一种很好的做法。您可以将其设置为 likesetName(name)而不是 write this.name=name。两者最终都执行相同的操作。

于 2013-05-23T15:28:23.520 回答