JAVA方法中的参数用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
}
|
|
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来修饰的原因的更多相关文章
- JAVA方法中的参数用final来修饰的效果
很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那 ...
- java 对象的this使用 java方法中参数传递特性 方法的递归
一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...
- java方法中参数传递与随机点名器、库存管理案例
一 参数传递 1.定义: 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数, 这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我 们称 ...
- ajax 方法的使用以及方法中各参数的含义
由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...
- C# 方法中的参数类型
二.方法中的参数类型 1. 值参数 值参数是指不带修饰符只带数据类型的形参. 值参数在使用值向方法传递参数时,编译程序会把实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改内存中实参的 ...
- ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解
转自 ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解 ArcGIS Engine中总调用IFeatureCla ...
- JAVA方法中参数到底是值传递还是引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个实例对象作为参数被传递到方法中时,参 ...
- spring mvc中的控制器方法中的参数从哪里传进来?
编写控制器方法的时候很奇怪,spring是怎么知道你控制器方法的参数类型,并且注入正确的对象呢? 比如下面这样 @RequestMapping(value="/register", ...
- java方法中,传参是传值还是传址问题(对比C语言、C#和C++)
问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...
随机推荐
- 浅析Linux服务器集群系统技术
浅析Linux服务器集群系统技术 目录 前言 常用的服务器集群 集群系统的优势 LVS集群的通用体系结构 为什么使用层次的体系结构 为什么是共享存储 可伸缩Web服务 前言 总结两篇技术文章,努力学习 ...
- Dicom文件转mhd,raw文件格式
最近在整理与回顾刚加入实验室所学的相关知识,那会主要是对DICOM这个医疗图像进行相应的研究,之前有一篇博客已经讲述了一些有关DICOM的基本知识,今天这篇博客就让我们了解一下如何将Dicom文件转为 ...
- 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-6 直接光源采样
Chapter7 Sample Lights Directly Preface 今天我们来讲这个还算牛逼的技术——直接光源采样 之前我们提到过,在2-7 前两篇我们也提到要减少噪点,就是图片上的黑点 ...
- linux 学习笔记 TAR包管理
>显示gong.tar 文件内容 #tar tf gong.tar ./epuinfo.txt ./smart/ ./smart/smartsuite-2.1-2.i386.rpm ./smar ...
- 多表查询、可视化工具、pymysql模块
create table dep( id int primary key auto_increment, name varchar(16), work varchar(16) ); create ta ...
- [数据库]Sqlite使用入门
官网的文档结构十分恶劣,大概翻了一下,提供入门指引. 0. sqlite的安装 根据自身情况,在官网下载32位/64位的dll文件以及sqlite-tools-win32-x86-3240000.zi ...
- JavaScript基础笔记(十三)测试和调试
错误处理与测试 一.错误处理 一)try-catch语句 function atest() { try { //可能发生错误的代码 return 0; } catch (error) { //错误处理 ...
- 获取Android设备WIFI的MAC地址 “MAC地址”
需要指出的是:wifi状态和wifi AP状态是互斥的状态:也就是一旦发现WIFI AP打开,WIFI是不能被打开的. 获取Android设备的WIFI MAC地址,首先需要将设备中的WIFI个人热点 ...
- = =用createJS写个flyppyPeople
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 最近flyppybird很流行啊,今天中午闲着没事干,就用现有的素材写了个flyppyPeople,因为角色是个人,所以就叫People啦 ...
- C++学习笔记47:链表的概念与结点类模板
学堂在线学习笔记 链表的概念与结点类模板 顺序访问的线性群体--链表类 链表是一种动态数据结构,可以用来表示顺序访问的线性群体: 链表是由系列结点组成,结点可以在运行时动态生成: 每一个结点包括数据域 ...