publi cstatic void main(String hh[])
{
int i = 1;
System.
out.println(i);
checkInt(i);
System.
out.println(i);
}
public static void checkInt(final int i)
{
//do something
}
|
publicstaticvoid main(String hh[])
{
LoginInfo login = new LoginInfo();
login.setPassword("1235");
login.setUserName("mygod");
System.
out.println("username:"+login.getUserName()+",password:"+login.getPassword());
checkLoginInfo(login);
System.
out.println("username:"+login.getUserName()+",password:"+login.getPassword());
}
publicstaticvoid checkLoginInfo(final LoginInfo login)
{
login.setUserName("yun");
}
|
//若是不是final 的话,我能够在checkInt方法内部把i的值改变(有意或无心的,
//虽然不会改变实际调用处的值),特别是无心的,可能会引用一些难以发现的BUG
publicstaticvoid checkInt(int i)
{
i = 200;//这样是能够的,不会编译出错的
//do something
}
//若是是final 的话,我能够在checkInt方法内部就没办法把i的值改变
//能够彻底避免上面的问题
publicstaticvoid checkInt(finalint i)
{
i = 200;//这样是不能够的,会编译出错的
//do something
}
//final 的引用类型方法参数
publicstaticvoid checkLoginInfo(final LoginInfo login)
{
login = new LoginInfo();//error,编译不过去
//do something
}
//非final的引用类型方法参数
publicstaticvoid checkLoginInfo(LoginInfo login)
{
//没有任何问题,可是确定不符合此参数存在的初衷
login = new LoginInfo();
//do something
}
|