Heim >Java >javaLernprogramm >Erfahren Sie, wie Sie final zum Ändern von Parametern in JAVA-Methoden verwenden

Erfahren Sie, wie Sie final zum Ändern von Parametern in JAVA-Methoden verwenden

坏嘻嘻
坏嘻嘻Original
2018-09-15 15:09:591882Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Verständnis der Parameter in JAVA-Methoden und deren Verwendung. Er hat einen gewissen Referenzwert. Ich hoffe, dass er für Sie hilfreich ist.

Der Grund, warum Parameter in JAVA-Methoden mit final geändert werden

Viele Leute sagen, dass der Grund für die Verwendung von final zum Ändern von Methodenparametern in JAVA darin besteht, zu verhindern, dass Methodenparameter beim Aufruf manipuliert werden. Tatsächlich ist dies nicht der Grund, aber es kann zu Unklarheiten im Verständnis kommen. Einige Leute denken, dass der tatsächliche Wert der Variablen, in der die Anweisung aufgerufen wird, nicht geändert werden kann aufrufende Methode.

Tatsächlich ist das erste Verständnis falsch. Bei Grundtypen ist der Effekt derselbe, unabhängig davon, ob er am Aufrufort mit final geändert wird oder nicht, wie zum Beispiel der folgende Code:

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");
      }


Der Effekt, wenn die Parameter in der checkInt()-Methode auf „final“ oder „non-final“ gesetzt werden, ist für den aufrufenden Ort derselbe.

//如果不是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
      }


Das Gleiche gilt jedoch für Referenztypen. Unabhängig davon, ob sie geändert werden oder nicht, wird die Referenzadresse nicht geändert, aber der Attributwert der Referenzvariablen kann geändert werden. Wie folgt:

rrreee
rrreee
Für die zweite Aussage sieht es so aus, dass ich diesen Parameter angegeben habe, Sie haben nur The Der Wert dieses Parameters kann verwendet werden, Sie können ihn nicht ändern. Er gilt für Basistypen und Referenztypen wie folgt:

Das obige ist der detaillierte Inhalt vonErfahren Sie, wie Sie final zum Ändern von Parametern in JAVA-Methoden verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn