请帮助我为什么我的下面代码得到奇怪的输出..... 为什么getName()得到null。
输出
列表检查: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;
}
}
答案 0 :(得分: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;
}
像在制定者中一样。
答案 1 :(得分:1)
将局部变量name
和genre
分配给Movie
构造函数中同名的全局变量名。 Object
类型的默认值为null
,因此这些变量保持未分配状态。更正后的构造函数应显示为
public Movie(String name, String genre) {
this.name = name;
this.genre = genre;
}
答案 2 :(得分:1)
您使用this.name分配参数应该是其他方式
public Movie(String name, String genre)
{
this.name = name;
this.genre = genre;
}
答案 3 :(得分:1)
你的构造函数是错误的,它应该是
public Movie(String name, String genre)
{
this.name = name;
this.genre = genre;
}
答案 4 :(得分:0)
Reimeus没错。
“this”指的是类本身,所以“this.genre”会引用类变量“genre”。
切换它们以解决问题。
答案 5 :(得分:0)
当您编写name = this.name时,您将this.name的值赋给name。因此,在您的情况下,this.name在初始化时保持为null,并且您将其分配给名称。
使用您在bean中编写的getter和setter是一个好习惯。
您可以将其设置为setName(name)
,而不是撰写this.name=name
。两者最终都会执行相同的操作。