java是值调用_Java 只有值调用

在计算机科学中,参数传递的形式主要有以下2种: 值调用和引用调用,为了说明Java在传参过程中的参数传递方式,我们首先需要对上述中2种调用形式的定义做清晰的介绍

定义

现给出两者的定义:值调用(Call by Value): 指函数接收的是调用者提供的实参变量的值

引用调用(Call by reference): 指函数接收的是调用者提供的实参变量的地址

两种传递方式名词中的“值”和“引用”,是对函数调用时对实参求值策略的分类,而不是指实参的类型。所以,不能依据传入的实参类型来判断是何种调用方式。常见的理解错误,认为Java中的实参为基本数据类型即值调用,实参为引用类型即为引用调用。实际上,在Java中只有值调用

两种求值策略区别如下:

值调用: 被调函数的形参得到的是实参变量的值的副本,无法在被调函数中去修改实参的值

引用调用: 被调函数的形参得到的是实参变量本身,故可以通过被调函数中修改实参变量的值

Java 只有值调用

具体到Java中,其函数调用时的参数传递,是值调用还是引用调用?我们将分基本类型和引用类型分别讨论基本数据类型

对于基本数据类型(byte, short, int, long, float, double, char, boolean)而言(也称为值类型),形参得到是将实参变量的值的副本,显然被调函数中对形参的修改无法更新作用于实参,所以,对于实参为基础类型的情况而言,其参数调用类型为值调用引用类型

对于实参为引用类型时,根据上文可知,我们不能直接根据实参类型来断定其是引用调用

在Java中引用类型的变量的值,实际上存放的是所指对象的地址,其形参的得到也即该值(实参所指对象的地址)的拷贝,由于此时形参引用和实参引用都是指向同一对象,则在被调函数通过形参的引用变量修改所指对象的数据时,实参的引用同样可以获得对所指对象的相应修改。故很多人据此错误得出其为引用调用。其实这是错误的,因为正如上文所言,形参做的修改之所以能被实参所使用,是因为两者均指向同一个对象,其传递的依然是引用变量的值(即,对象地址),而不是传递引用变量的地址。所以如果在被调函数中,修改形参的引用变量的值,即改变形参引用变量其所指向的对象,其结果并不会改变实参的引用变量所指向的对象。

综上所述,对于实参为引用类型的情况而言,其参数调用类型同样为值调用,只不过其值是对象的地址

Note不可变对象

不可变对象,即对象一旦被创建后它的状态(对象的属性数据)就不能被改变。以下类的实例为不可变的:String, 基本类型的包装器, BigInteger和BigDecimal等

将不可变对象作为实参传入方法后,实参并不会被方法中的操作所修改,因为其为不可变对象,在方法中,欲改变该对象的操作实际会生成一个新对象,并让形参指向该新对象。所以,如前文所述,形参引用变量指向其他对象,并不会影响实参的指向数组

Java中,数组类型为对象。故可按照实参为引用类型进行考虑分析。即,将数组作为形参传入方法后,在方法中对数组元素的修改,该修改可以体现在原实参数组中。但是如果在方法中,修改形参引用,使其指向其他数组对象,则不会影响原实参数组的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 如何将数字倒置_每日一个小算法之整数中每位上的数字进行反转 20190810

题目要求:给出一个32位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21示例 4:输入:9646324351输出: 0注意:假设我们的环境只能存储得下 3…

mysql 投票总排行_MySQL投票表,查找每个用户对条目的最新投票,并根据值进行计数...

[编辑:]我添加了值(1052,10,3,1290839091,1)以更好地解决问题,并且必须将“item_id”添加到提取最新投票的子查询中.好极了!最后一个stackoverflow问题,我实际上可以回答!我已经浏览了一个星期寻找短暂的东西;甜蜜的我的胡同.感谢有趣的SQL问…

java多态可以传匿名对象吗_Java复习笔记2--匿名类和多态

匿名类Anonymous classes enable you to make your code more concise. They enable you to declare and instantiate a class at the same time. They are like local classes except that they do not have a name. Use them if you need to use a local class only once.pri…

java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级

大学的时候对web开发很感兴趣,对网页中的动画,对用户注册,对网页中表格填写等等都倍感兴趣。加之又有专业课程编程语言java,因此,对java web产生了浓厚的兴趣,再加之有北京圣思园 风中叶 大师的视频教程&am…

java apktoo_apktool.jar

apktool.jar是APKTOOL这个反编译工具必须用到的必备jar包,给大家提供最新的apktool.jar2.3.4,有需要的赶快下载吧!。相关软件软件大小版本说明下载地址apktool.jar是APKTOOL这个反编译工具必须用到的必备jar包,给大家提供最新的ap…

Java 内存 关系_JVM和Linux之间的详细内存关系

JVM和Linux之间的详细内存关系在一些具有8g物理内存的服务器上,主要运行Java服务。系统内存分配如下:Java服务的JVM堆大小设置为6g,监视过程大约需要600m,Linux本身使用大约800m。从表面上看,物理记忆应该足够&#xf…

java遍历删除原理,Java 垃圾回收机制实现原理

一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念&…

matlab简易编程,MATLAB简单编程

本帖最后由 wanggh 于 2016-12-5 14:47 编辑用数值差分、SOR迭代法求雷诺方程和用牛顿迭代法求解轴向柱塞泵滑靴副压力场的算法,%油膜厚度场、压力场迭代 MATLAB只认弧度制,不认角度制clear all; % (60rpm1rad/s)wg1000; %1000…

php删除字段某个字段,php数如何组删除某个字段

【摘要】PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。下面是php数如何组删除某个字段,让我们一起…

php重复点击按钮无效,完美解决UIButton按钮重复点击、多次响应的问题

最近测试老跑过来提bug,说按钮可以点好几次,然后蹦出来好几个一样的界面出来,解决了一个地方,其他地方也会冒出一样的问题来,仔细一想,还是要从根本上解决问题,于是想了几个方法:1.添…

matlab画地震复杂模型,基于MATLAB的地震正演模型实现

总 第 237 期2009 年 第 7 期计 算 机 与 数 字 工 程 37 7132  基 于 L 地 震 正 演 模 型 实 现 3贾 跃 玮 1)   杨   锐 2)(中 国 地 质 大 学 地 下 信 息 探 测 技 术 与 仪 器 教 育 部 重 点 实 验 室 1)   北 京   100083)(川 庆 钻 探 工 程 有 限 公 司 地 质 …

用matlab抽样定理验证,MATLAB抽样定理验证.docx

MATLAB抽样定理验证.docx目的通过 MATLAB 编程实现对时域抽样定理的验证,加深抽样定理的理解。同时训练应用计算机分析问题的能力。任务连续信号 ftcos8*pi*t2*sin40*pi*tcos24*pi*t,经过理想抽样后得到抽样信号 fst,通过理想低通滤波器后重构…

ios java 图片上传到服务器,iOS 图片上传服务器

最近搞图片上传,折腾了一个星期终于做出来了,网上搜出来的方法几乎都是好几年前的,试了好多都不能用,此次把代码公布出来供大家参考。注:部分代码是后台写的,此方法没用到第三方库。1.图片保存到本地同时上…

matlab判断能控和能观,实验三 利用Matlab分析能控性和能观性

实验三 利用Matlab分析能控性和能观性实验目的:熟练掌握利用Matlab中相关函数分析系统能控能观性、求取两种标准型、系统的结构分解的方法。实验内容:1、能控性与能观性分析中常用的有关Matlab函数有:Size(a,b) 获取矩阵的行和列的数目Ctrb(a…

JAVA table word,实战 | Java读取Word,包含表格!

本文转载自微信公众号「JAVA日知录」,作者单一色调。转载本文请联系JAVA日知录公众号。不能每天都发鸡汤呀,今天分享一篇开发实战。业务需求我们有这样一个需求,需要抽取出WORD文档中的内容,然后组装成特定的json格式发送给第三方…

基于matlab的频域辨识,基于Lab VIEW的控制系统频域分析研究

在系统设计和构成之前,必须对系统进行分析、综合和预测研究,从而得出系统的性能评价指标,如控制精度、响应速度和系统稳定性等。一般来说,我们可以从两个方面来对系统的性能进行分析,一是时域,二是频域,它们是从不同的侧面,以被研究系统的传递函数为依据,来研究系统的特性,关于…

php培训出生做微电影网站的,微电影分享网站织梦整站源码

使用说明:1、模板在目录下【themes】-【default】文件夹中2、logo等图片在【statics】-【images】中安装教程:1、传到空间,由于有很多人反应安装后首页样式都乱的,(强烈要求安装到根目录,如:127.0.0.1 / ww…

mysql分列查询,Mysql导出问题,乱码问题,为分列问题解决!!!

前言:本文可以先阅读完再跟着做。Mysql查询出的数据导出为csv最近遇到同学的一个需求,要求差寻一些数据然后导出给他,因为之前也有做过类似的事情,觉得可以一下就搞定,但是居然出现乱码又出现没有分列的情况&#xff0…

微信你scope 参数错误 php,微信开发: scope参数错误或没有scope权限解决方法

scope为snsapi_userinfo 未关注者点击授权提示 scope参数错误或没有scope权限解决方法出现这种错误网上查出现有的原因是:订阅号没有相关的权限账号没有认证,没有相关的权限那么这里遇到问题两种都不是。开发账号是 服务号,而且也是认证号。解决方法:错…

oracle什么时候用in,Oracle Study之---Oracle IN和NOT IN的使用

Oracle Study之---Oracle IN和NOT IN的使用NOT IN 与 IN 的区别:------------------------------------------------------------------------------------------------------not In 相当于<> all,如果 Not In 后面跟的是子查询的话&#xff0c;子查询中只要包含一个 nu…