首頁 >Java >java教程 >如何理解JAVA方法中的參數用final來修飾

如何理解JAVA方法中的參數用final來修飾

坏嘻嘻
坏嘻嘻原創
2018-09-15 15:09:591872瀏覽

這篇文章帶給大家的內容是關於如何理解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和非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");
      }



#對於第二種說法,是這個樣子的,我給了這個參數,你只能用這個參數的值,你不能修改它,對於基本型別和引用型別是一樣的,如下:

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

以上是如何理解JAVA方法中的參數用final來修飾的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn