JAVA方法中的参数用final来修饰的原因

    xiaoxiao2021-12-14  22

    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       } 注:

    程序的确是人写的,但是为了程序的灵活性,高效性,程序员不能只为了自己的一时想法写代码。而应该联系以后程序的扩展,维护等。所以应该考虑

    一下参数的标明。

    转载请注明原文地址: https://ju.6miu.com/read-963267.html

    最新回复(0)