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
      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值