JAVA方法中的参数用final来修饰的原因
来源:互联网 发布:工业大数据行业分析 编辑:程序博客网 时间:2024/05/16 12:36
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
- JAVA方法中的参数用final来修饰的原因
- JAVA方法中的参数用final来修饰的原因
- java方法中的参数用final来修饰的原因
- JAVA方法中的参数用final来修饰的原因
- JAVA方法中的参数用final来修饰的原因
- JAVA方法中的参数用final来修饰的原因
- JAVA方法中的参数用final来修饰的原因
- final 来修饰方法参数的原因
- JAVA中用final来修饰方法的参数
- ListView 里面getView()的参数final来修饰的原因
- Java-用final修饰方法参数
- Java中方法用final修饰参数的作用
- 一个内部类定义在外部类方法中的的例子(调用参数的时候需要注意final来修饰)
- java中final修饰方法传入参数的影响
- Java —— final 修饰方法参数的作用
- JAVA方法中的参数 final 的误区
- Java中final修饰参数的作用
- Java中final修饰参数的作用
- 反编译dex文件
- Android中将清单文件的一些配置参数
- Unity UGUI 原理篇(三):RectTransform
- 关闭线程Thread
- 【技术贴】解决127.0.0.1和http://localhost均被拦截跳转到另一个网页
- JAVA方法中的参数用final来修饰的原因
- python-模块
- 运维平台项目
- Android拖拽的简单使用
- 世界是复杂的,万物是互联的
- Docker是个啥?(简单易懂)
- 微信开源PhxSQL:高可用、强一致的MySQL集群
- Unity UGUI 原理篇(四):Event System Manager 事件與觸發
- java知识整理-File/IO篇