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
}
|