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

Original: https://www.cnblogs.com/gmq-sh/p/8431960.html
Author: 园芳宝贝
Title: JAVA方法中的参数用final来修饰的原因

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538078/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring Security OAuth2 完全解析 (流程/原理/实战定制) —— Client / ResourceServer 篇

    一、前言 假设对 Spring Security 本身原理有一定程度的了解,对 OAuth2 规范流程、Jwt 有基础了解,以此来对 SpringSecurity 整合 OAuth…

    Java 2023年6月6日
    093
  • 老生常谈的iOS- weak原理,你真的懂得还是为了应付面试

    前言 weak对于iOS开发来说只要解决一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。 weak 关键字的作用域弱引用,所引用对象的计数器不会加一,…

    Java 2023年6月16日
    072
  • 有迹可循之CheckList

    一. 背景 我们经常在Code Review的时候经常不知道怎么CodeReview,或者说写代码的时候怎么写出很棒的代码,更多的是靠我们的经验和感觉。通过自己积累的知识,来看代码…

    Java 2023年6月15日
    065
  • 第五篇- 抖音的强大对手来了,用Flutter手撸一个抖音国际版,看看有多炫

    前言 由于中间几个月项目天天加班,导致没没时间更新,最近一段时间对前端进行了重构,加了很多页面,如登录、注册、关注、个人中心等,目前写这个纯属业余个人爱好,所以断断续续的继续在做&…

    Java 2023年6月7日
    075
  • 【设计模式】三种工厂模式

    【设计模式】工厂模式 相对来说,写的比较乱,但是看一下实例,其实理解很快 抽象工厂模式(这里主要介绍抽象工厂模式) 核心的工厂类不再负责所有对象的创建,而是将具体的创建工作交给子类…

    Java 2023年6月13日
    062
  • SpringMVC工作流程

    SpringMVC 1、MVC Model(模型)+View(视图)+Controller(控制器),通过将业务逻辑、数据、显示分离来组织代码。 Service层(处理业务)、Da…

    Java 2023年6月5日
    082
  • Spring5

    Spring概述 1、Spring是轻量级开源JavaEE框架 2、Spring可以解决企业应用开发的复杂性 3、组成核心IOC、Aop IOC:控制反转,把创建对象过程交给Spr…

    Java 2023年6月13日
    059
  • Java如何仅将字符串中的数字部分转成数字类型

    需要将字符串中的数字部分转成数字类型,看到网上很多都是利用Integer.parseInt(string)用过循环的方式来判断单个字符能否转换成功再进行拼接转换 其实可以使用Str…

    Java 2023年6月7日
    074
  • LinkMovementMethod「解决点击ClickableSpan触发view点击事件」

    上一篇写过自定义展开收起的textview,不过最近发现有个问题。 那就是在列表页中,如果点击了全部,会触发view的点击事件,导致展开后接着进入了详情。 这显然不是想要的结果。 …

    Java 2023年6月7日
    080
  • java.lang.IllegalAccessException;java.lang.Class.newInstance

    问题:Exception in thread “main” java.lang.IllegalAccessException: Class cn.sheng…

    Java 2023年5月29日
    0104
  • RabbitMQ——消息可靠性投递

    一。什么是消息可靠性投递? 1.保证消息百分百发送到消息队列中去 a.保证mq节点成功接受消息 b.消息发送端需要接受到mq服务端接受到消息的确认应答 c.完善的消息补偿机制,发送…

    Java 2023年5月30日
    081
  • 机器学习常用指标

    一、机器学习常用指标 对于一个分类任务,我们预测情况大致如下面混淆矩阵所示: 预测为正样本预测为负样本 标签为正样本 TP FN 标签为负样本 FP TN 1、accuracy a…

    Java 2023年6月15日
    065
  • 搬砖_kafka的一些命令

    有关kafka的一些命令 kafka查看当前消费组消费到哪个offset cd /opt/kafka/bin #即进&#x516…

    Java 2023年6月7日
    092
  • 二叉搜索树和平衡二叉树

    写在前面 前面讲了树的基本概念,这篇文章主要讲常见的树的基本操作,如查找,新增,删除等。其中通过动图的方式使得更加容易理解。 二叉查找树 二叉查找树(BST,Binary Sort…

    Java 2023年6月5日
    066
  • 代码都写不完,还写个锤子注释!

    现在的项目开发里,代码注释就像程序员的头发,越来越少。 尤其是国内,这种现象不仅是在小公司小团队中司空见惯,就算在大公司,以及大团队中的开源项目里,也是屡见不鲜。 上图是我在阿里的…

    Java 2023年6月7日
    073
  • leetcode_19. 删除链表的倒数第 N 个结点

    这个题目是我在leetcode上写出来的第一道题目。 题目表述 给你一个链表,删除链表的倒数第 n个结点,并且返回链表的头结点。 ++i 和 i++ i++会产生一个临时变量,而 …

    Java 2023年6月5日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球