本质上,只有值传递这一种传递方式,所谓的引用传递是值传递的一种。即:1

2

3

4

5

6// 将2这个值复制一份传递给m

int a = 2;

m(a);

// 将引用o复制一份并将其值传递给m

m(o);

值传递的核心就在于”复制”。传递的并不是原始数据,而是复制出的,与原始数据相等的东西。因此方法对这个克隆体所做的一切操作都不会影响原始数据。

虽然理论基础是统一的,但是当传递的是引用时,可能会让人产生一些迷茫。这也是为什么很多人将引用传递从值传递中提出来单独论述的原因。例如:1

2O o = new O();

m(o);

执行m(o)时,会复制出一份引用o的副本o_c并将其传递给m。自此o与o_c就是两个完全独立的个体,不会再有任何瓜葛。但是问题在于,初始时,因为o_c是o的副本,因此其空间中存放的对象地址必然与o相同。进而,如果m中有如下操作:1o = new O();

此举相当于将o_c中存放的对象地址指向了一个新的对象。而由于o与o_c已完全独立,因此并不会导致o中存放的对象地址发生变化。

但是,如果我们在m中做如下操作:1o.setName("八云紫");

此时o_c并没有修改其内部存放的对象地址,而是直接操作了该对象中的数据。对此o中存放的对象地址依然没有发生变化,但由于其所存放的对象本身被o_c的操作所修改,看起来仿佛是传递进方法的引用影响了原始引用一样。但是即便如此,o_c也没有真正修改o中存储的值。

举一个生活中的小例子:小王手中有一个神秘网站的网址,从这个网站可以下载神奇的影片。本质上,小王所拥有的并非网站本身,而仅仅是网址这个字符串。小刘抄到了这个网址,那么无论小刘做什么事,对小王所拥有的那个字符串都不会造成影响。注意:这里所说的不会被影响的事物是小王的”网址字符串”。若小刘仅仅只是修改他拿到的网址为另一个网址,那么对小王完全没影响。如果小刘因为没钱充会员导致无法下载神奇的影片而一怒之下黑进了这个网站并将其中的影片全部换成了金刚葫芦娃,那么小王也无法在这个网站下载神奇的影片了。此时,小李所改变的是网站本身,并不是小王所持有的网址字符串。

java 方法 参数 引用_Java 基础相关推荐

  1. java方法的传递方式_JAVA基础--方法传参

    JAVA基础--方法传参 为啥拿这个当话题? 在初学者阶段,许多童鞋都对方法传参比较迷茫,知其然不知其所以然. 一.先说说参数传递的几个术语: 值调用(call by vale):表示方法接收的是调用 ...

  2. java 方法参数多_java 方法参数过多,怎么处理?

    本人对java的研究甚少,之前只是用一用,从未有过深度的学习,但却意外的发现了一个问题,那就是java的参数过多会出现错误,你们可能会认为,我找到的这个问题没有任何意义,对,我也是这样想的,可是,你们 ...

  3. java 静态内部类 弱引用_Java基础 强引用、弱引用、软引用、虚引用

    前言 在ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc.Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决 ...

  4. java方法四要素_Java基础语法

    Free Talk 最近在JavaGuide博客里面兜兜转转了几天,一边等华为的实训消息,一边随便看点Java后端开发的知识.但是这一周总感觉看了就忘,而且光看也很容易走神发呆,要不然就是去打王者啥的 ...

  5. java 方法参数绑定_java在注解中绑定方法参数的解决方案

    我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成 ...

  6. java方法参数泛型_Java泛型方法类型参数

    我对泛型方法的显式类型参数有问题.我知道我可以这样做: Foo.function(); 假设有一个 void function() {...} 在Foo类中的函数.确切的问题是: >我想下载一些 ...

  7. Java方法详解(基础)

    Java方法详解(基础) 什么是方法? System.out.println():调用系统类标准输出对象方法out. 方法是语句的集合,他们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合. ...

  8. java.函数参数太多,Java方法参数太多怎么办—Part 2—引入参数对象,javapart

    Java方法参数太多怎么办-Part 2-引入参数对象,javapart 目录 自定义类型 引入参数对象 本文是这个系列的第二篇文章,介绍了通过引入参数对象应对参数过多的问题.如果你也希望参与类似的系 ...

  9. java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解

    1.1 方法重载的概述和特点 方法重载概述 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可. 方法重载特点 与返回值类型无关,只看方法名和参数列表 在调用时,虚拟机通 ...

最新文章

  1. 作为导师,我希望学生在毕业后主动拉黑我
  2. sphinx error connection to 127.0.0.1:9312 failed (errno=0, msg=)
  3. 使用 做签名的post_java组件HuTool相关工具类的使用(五)
  4. 分布式架构下常见序列化技术-了解序列化的发展
  5. 【转】CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法
  6. 嵌入式常见笔试题总结(6)
  7. 菜单固定随滚动条滑动
  8. [转]利用处理程序错误攻击(下)
  9. 关于STM32L100xx, STM32L151xx, STM32L152xx ,STM32L162xx 的Power Control
  10. 简单的解决办法,复杂的分析工作
  11. 基于JavaWeb的企业出差费用报销管理系统设计与实现
  12. Pycharm 搭建 Django 项目 (非常详细)
  13. 【lssvm分类】基于最小二乘支持向量机lssvm实现数据分类matlab代码
  14. 做对的事情远比把事情做对重要得多
  15. Java面试题大全(part_4)
  16. GWT RPC 开发
  17. Windows 命令行基础
  18. 二等水准测量记录数据_二等水准测量记录计算示例.doc
  19. 漏刻有时数据可视化Echarts组件开发(2):根据温度阈值显示不同颜色的温度报警动画
  20. STC单片机74hc164驱动8位数码管动态显示

热门文章

  1. 环境变量设置及第三方模块安装
  2. vs2005 + ASP.NET 页面布局应注意问题及方法步骤
  3. 人工智能突破!牛津大学的科学家用机器合成了“类人类思想”
  4. android获取所有的子进程,Android M:如何获取所有进程UID?
  5. 怎么向html插入广告,给blogger添加各种广告代码的方法
  6. html制作背景音乐,HTML插入背景音乐方法【全】
  7. python开源项目博客_Blog_mini首页、文档和下载 - Python Flask开源博客 - OSCHINA - 中文开源技术交流社区...
  8. 004_Vue按键修饰符
  9. 033_jdbc-mysql数据库连接池
  10. 百度测试linux面试题,百度测试开发岗位面试题目