您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

如何理解JAVA方法中的参数用final来修饰

2025/8/15 20:00:25发布36次查看
本篇文章给大家带来的内容是关于如何理解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来修饰的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product