如果你把㆒个名为foo的对象作为参数传给某个函数,那么「对参数赋值」意味改变foo,使它引用(参考、指涉、指向)另㆒个对象。如果你在「被传入对象」身㆖进行什么操作,那没问题,我也总是这样干。我只针对「foo 被改而指向(引用)完全不同的另㆒个对象」这种情况来讨论:

void aMethod(Object foo)

{
    foo.modifyInSomeWay(); // that's OK
    foo = anotherObject; // 麻烦来了!

}

我之所以不喜欢这样的作法,因为它降低了代码的清晰度,而且混淆了pass by value(传值)和pass by reference(传址)这两种参数传递方式。Java 只采用pass by value传递方式,我们的讨论也正是基于这㆒点。在pass by value 情况㆘,对参数的任何修改,都不会对调用端造成任何影响。那些用过pass by reference 的㆟可能会在这㆒点㆖犯胡涂。

另㆒个让㆟胡涂的㆞方是函数本体内。如果你只以参数表示「被传递进来的东西」,那么代码会清晰得多,因为这种用法在所有语言中都表现出相同语义。
在Java中,不要对参数赋值;
当然,面对那些使用「输出式参数」(output parameters)的语言,你不必遵循这条规则。不过在那些语言中我会尽量少用输出式参数。

方法参数中pass by reference(传引用)和 pass by value(传值)的区别相关推荐

  1. java值传递和引用传递_辨析Java方法参数中的值传递和引用传递

    小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示. publ ...

  2. Effective C++条款20解读:宁以pass by reference to const替换pass by value

    我们先来看一个简单的程序: #include <iostream> using namespace std;class A { private:string name;string add ...

  3. perl中子程序中参数的两种引用(传递)方式:pass by value and pass by Reference(传入引用)

    这里主要讨论的是当你要传递的参数不是仅仅一个的时候,也就是两个以上,并且他们数据的类型还不一致的时候,我们要遇到的问题: 下面是一个例子: use strict;#这里是两个数组 my @i =('1 ...

  4. js方法参数中含有单引号双引号的处理

    最近在做项目时,遇到一个问题.当在js脚本中,拼接生成一个tr,然后添加到一个表格里. //假定testval是从后台传过来的数据var testval = "含有'半角单引号的字符串&qu ...

  5. java reference 传引用_Java的引用(reference)---Roni

    摘自<Java面向对象编程>一书,作者:孙卫琴 来源:www.javathinker.org 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说 ...

  6. 请教:Java字符串内部的大括号,与方法参数中的...,代表什么意思呢?

    在Github上学习设计模式,读到源码的时候有点疑问,估计一下大概知道是什么意思,希望大神们能具体解释一下这种用法,多谢! import org.slf4j.Logger; import org.sl ...

  7. python 函数参数枚举_Python中的枚举:如何在方法参数中强制执行

    Python是动态的和鸭子类型 – 变量可以改变类型,你不能强制类型的方法. 但是,您可以使用isinstance()检查方法体中的类型. instance()将允许用户子类化枚举以便将来扩展. 例如 ...

  8. Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识梳理 1.Java内存管理-程序运行过程(一) 2 ...

  9. c# 方法参数 传值or传引用?(ref,out,可变参数params,可选参数,命名参数)

    目录 一.方法参数的类型----值类型和引用类型 二.一些特殊的方法参数 1.引用参数---ref 2.输出参数---out 注意:ref和out的区别 3.可变参数/参数数组-----params ...

最新文章

  1. 题目1028:继续畅通工程
  2. 洛谷 P1583 魔法照片
  3. 笔记-计算机网络基础-开放系统互连参考模型OSI
  4. linux下mariadb大小写敏感
  5. 对象容器设计模式_容器对象模式。 一种新的测试模式。
  6. 流式计算storm核心组件介绍以及入门案例---跟着就能在本地跑起来的storm项目
  7. 手把手教你用Jieba做中文分词
  8. mysql net 指令_MySQL命令
  9. myeclipse安装maven
  10. 【JSP入门】只知道HTML却不知道JSP?
  11. python中if else语句用法_Python条件语句详解:if、else、switch都有了
  12. vue引入SuperMap超图 引入流程及报错处理
  13. 华云天下荣膺“2021年度十佳呼叫中心硬件及软件设备供应商”
  14. 全球及中国石油天然气开采行业产量情况及十四五开发战略规划报告2021年版
  15. 测试人如何快速晋升为月薪过万的软件测试工程师?
  16. 对话 NuCypher:如何安全地存储、共享和管理链上私人数据
  17. Gmail配置邮箱客户端
  18. 数据库安全性控制及控制流程和常用方法
  19. 正则表达式常用的校验方法
  20. 混合现实:地面高度不准确

热门文章

  1. linux查看电脑耗电量,命令行 - 在Linux上,观察程序耗电量使用的最佳方法是什么?...
  2. 电脑影响,重装系统对电脑有什么影响,教您经常重装系统对电脑有什么影响
  3. 毕设新思路附源码 | 微医平台项目详细步骤
  4. LVTTL与LVCMOS区别
  5. 手机端设置缩放的解决方法和遇到的UC浏览器的坑
  6. 关于PHP中浏览器禁止Cookie后,Session能使用吗?
  7. aspx连接mysql木马_让你变成ASP木马高手_安全教程_脚本之家
  8. 洛谷P1244 青蛙过河 DP/思路
  9. Docker容器安装最快最简单__编程小黑马
  10. 企业一体化信息管理平台是什么