Java编程——重构-你为什么要对参数赋值?
对于学过多门语言的开发者来说,应该都明白在不同语言中对参数赋值有着不同的意义,
总的来说参数有值传递和引用传递两种,
而在Java中只有值传递的概念。
这意味着在方法内对参数赋值是没有意义的。
而且还很容易引起代码的误解。
对于初学者来说这一点比较重要,可能不是很容易理解,我们用例子来说明。
修改参数
我们来看个简单的例子,在这个例子里面我们在方法内对参数进行了修改,
这段代码的输出还不至于让人糊涂,
但如果修改的是对象的话,代码可能就有误导性了
修改参数对象
为了说明这个问题,我写了一个demo代码,当然代码是完全跑不通的。。只是为了让代码更容易理解,所以才这么写,
这段代码理解上来就是,实例化了一个日期对象是4月1日,然后在方法内对日期加了一天,
然后再对这个日期(应该变成了4月2日)换车一个5月2日的对象,
这时候就可以验证对参数赋值和对参数修改的区别所在。
如果这代码运行正常的话,输出应该是下面这样
你看,在方法内对参数赋值是没有意义的,因为Java它传递的是值,而不是引用,所以并不能够修改原引用的数值。
这对于从 C 这种可以传引用的语言转过来的开发者来说其实有点别扭,
当然他们也可能会被这种代码误导。
总结
Java是一门传值语言,在coding中其实应该尽量避免对参数赋值的行为,
如果你看到代码中有这样的代码,
请尽情重构了它吧!
欢迎工作一到五年的Java工程师朋友们加入Java架构开发:468947140
点击链接加入群聊【Java-BATJ企业级资深架构】:https://jq.qq.com/?_wv=1027&k=5zMN6JB
本群提供免费的学习指导 架构资料 以及免费的解答
不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导
对本文感兴趣、喜欢的欢迎关注小编,小编持续更新
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【Nebula系列】通过UNIX域套接字传递描述符的应用
传送文件描述符是高并发网络服务编程的一种常见实现方式。Nebula 高性能通用网络框架即采用了UNIX域套接字传递文件描述符设计和实现。本文详细说明一下传送文件描述符的应用。 1. TCP服务器程序设计范式 开发一个服务器程序,有较多的的程序设计范式可供选择,不同范式有其自身的特点和实用范围,明了不同范式的特性有助于我们服务器程序的开发。常见的TCP服务器程序设计范式有以下几种: 迭代服务器 并发服务器,每个客户请求fork一个子进程 预先派生子进程,每个子进程无保护地调用accept 预先派生子进程,使用文件上锁保护accept 预先派生子进程,使用线程互斥锁上锁保护accept 预先派生子进程,父进程向子进程传递套接字描述符 并发服务器,每个客户端请求创建一个线程 预先创建线程服务器,使用互斥锁上锁保护accept 预先创建线程服务器,由主线程调用accept 当系统负载较轻时,传统的并发服务器程序模型就够了。相对于传统的每个客户一次fork设计,预先创建一个进程池或线程池可以减少进程控制CPU时间,大约可减少10倍以上。 某些实现允许多个子进程或线程阻塞在acce...
- 下一篇
Coding and Paper Letter(八)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ESA_DSQ/article/details/81106345 资源整理 1 Coding: 2 Paper: 1 Coding: 1.Python项目,由Allen Downey撰写的Think Python第二版的LaTeX源代码和支持代码。 ThinkPython2 2.R语言包h3jsr,h3jsr使用V8的神奇力量通过其javascript绑定提供对Uber H3库的访问。 h3jsr 3.Python项目roi pooling,深度学习项目,这个项目包含自定义TensorFlow操作的感兴趣区域池化的实现。 负责计算的CUDA代码主要取自Ross Girshick最初的Caffe实现。 roi pooling 4.开源项目Weak Supervised Segmentation List,该项目包含一些弱监督语义分割工作的列表。根据监督学习类型,下面列出了论文和资源。 Weak Supervised Segmentation List 5.Python项目General Fr...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能