JAVA方法中的参数用final来修饰的原因
来源:互联网 发布:淘宝买csgo 编辑:程序博客网 时间:2024/05/06 02:12
JAVA方法中的参数用final来修饰的原因
很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的地方的变量的实际值不会被修改,另一种理解就是仅在调用方法内部不能被修改。
实际上第一种理解是有错误的,对于基本类型来说在调用的地方,用不用final来修饰都是一样的效果,如下面的代码:
publi cstaticvoid main(String hh[])
{
int i = 1;
System.out.println(i);
checkInt(i);
System.out.println(i);
}
public staticvoid checkInt(finalint i)
{
//do something
}
你把checkInt()方法中的参数设成final和非final的效果对调用的地方来说是一样子的。
但是,对于引用类型来说也是一样子的,用不用修饰都不会改变引用地址,而都可以改变引用变量的属性值。如下:
publicstaticvoid main(String hh[])
{
LoginInfo login = newLoginInfo();
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(finalLoginInfo 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(finalLoginInfo login)
{
login = new LoginInfo();//error,编译不过去
//do something
}
//非final的引用类型方法参数
publicstaticvoid checkLoginInfo(LoginInfo login)
{
//没有任何问题,但是肯定不符合此参数存在的初衷
login = new LoginInfo();
//do something
}
- 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修饰参数的作用
- asp.net 大文章分页代码(c#)
- 谈谈 eMule 中的 内存管理器类 CMemPoolMgr
- ubuntu mysql远程访问
- nat p2p
- ToggleButtonBar 的 selectedIndex= -1 问题
- JAVA方法中的参数用final来修饰的原因
- 获取网页上的屏幕信息和鼠标坐标
- 觉得很有道理,所以转贴
- 内核自动加载模块编译选项
- Thinking in java 学习笔记(2)
- Asp.net常用的51个代码
- SQLSERVER2000锁
- 30岁的问题,为什么有人说程序员只能干到30岁。
- 一些国内有名的开源项目