Maison  >  Article  >  Java  >  Comment comprendre comment utiliser final pour modifier les paramètres dans les méthodes JAVA

Comment comprendre comment utiliser final pour modifier les paramètres dans les méthodes JAVA

坏嘻嘻
坏嘻嘻original
2018-09-15 15:09:591803parcourir

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
      }


Cependant, il en va de même pour les types référence. Qu'elle soit modifiée ou non, l'adresse de référence ne sera pas modifiée, mais la valeur d'attribut de la variable de référence peut être modifiée. Comme suit :


Pour la deuxième déclaration, cela ressemble à ceci j'ai donné ce paramètre, Vous. ne peut utiliser que la valeur de ce paramètre, vous ne pouvez pas le modifier, il en est de même pour les types de base et les types référence, comme suit :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn