Le contenu de cet article explique comment comprendre les paramètres des méthodes JAVA et utiliser final pour les modifier. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
La raison pour laquelle les paramètres des méthodes JAVA sont modifiés avec final
Beaucoup de gens disent que la raison de l'utilisation de final pour modifier les paramètres de méthode dans JAVA est d'empêcher que les paramètres de méthode ne soient falsifiés lorsqu'ils sont appelés. En fait, ce n'est pas la raison, mais il peut y avoir des ambiguïtés dans la compréhension. Certaines personnes pensent que la valeur réelle de la variable dans laquelle l'instruction est appelée ne sera pas modifiée. Une autre compréhension est qu'elle ne peut pas être modifiée uniquement dans le cadre. méthode d'appel.
En fait, la première compréhension est fausse. Pour les types de base, l'effet est le même qu'il soit modifié avec final ou non au lieu d'appel, comme le code suivant :
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"); } |
L'effet de la définition des paramètres de la méthode checkInt() sur final et non final est le même pour le lieu appelant.
//如果不是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 } |
|
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!