この記事の内容は、JAVA メソッドのパラメータを理解し、final を使用して変更する方法についてです。必要な方は参考にしていただければ幸いです。
JAVA メソッドのパラメーターが Final で変更される理由
JAVA でメソッドのパラメーターを変更するために Final を使用する理由は、呼び出し時にメソッドのパラメーターが改ざんされるのを防ぐためだと多くの人が言います。実際には、これが理由ではありませんが、ステートメントが呼び出される変数の実際の値は変更されないと考える人もいます。また、ステートメント内でのみ変更できないという理解もあります。呼び出しメソッド。
実際、最初の理解は間違っています。基本型の場合、次のコードのように、呼び出しの場所でfinalで変更されているかどうかに関係なく、同じ効果があります。
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
}
ログイン後にコピー
|
#checkInt() メソッドのパラメータを Final と Non-final に設定します。効果 発信場所も同様です。
ただし、参照型の場合も変更しても変更しなくても参照アドレスは変更されませんが、参照変数の属性値は変更できます。次のように:
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");
}
ログイン後にコピー
|
##2 番目のステートメントについては、これは次のようになります。このパラメータを指定しました。このパラメータの値は使用することのみができ、変更することはできません。これは、次のように基本型と参照型で同じです。 #//如果不是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
}
ログイン後にコピー
以上がFinal を使用して JAVA メソッドのパラメータを変更する方法を理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。