交流群:462197261站长百科站长论坛热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
点击这里给我发消息
  • 当前位置:
  • JAVA参数传递方式实例浅析【按值传递与引用传递区别】

    本文实例讲述了JAVA参数传递方式。分享给大家供大家参考,具体如下:

    首先要明确的是JAVA中没有引用传递, 全部是按值调用

    令大家所费解的 当对象引用作为参数时  函数为什么能修改真实的对象呢?这不是引用传递的特征吗?

    尤其先学习C++再学习JAVA的同学(比如说我自己)会这样认为,

    用白话解释就是:

    引用传递指针时, 连函数操作的指针都是原来的指针,比如C++传入对象时直接用传入的指针操作

    而JAVA的引用传进函数时 , 会复制一个引用与实参指向同一对象的引用, 操作的不是同一个引用,

    如果还不明白区别再换种方式解释一次:

    JAVA只有按值调用, 参数是什么都会复制一份再操作, 就算是对象的引用也会复制一份新的引用,只不过指向的是同一个对象

    这种传参方式叫做按值传递, 传递的东西可以是引用(类似C++的指针)

    如果是引用传递像C++传入指针不会再复制一份了,直接拿来用

    如果再不明白也没关系,看看下面的例子和解释分析

    举个例子:

    输出结果:

    也就说我们用一个函数修改了 传入的一个int变量和一个对象内容,

    再输出int变量和对象内容时发现 ,int的没有改变,而 对象的内容改变了

    这说明什么呢,说明像 int ,double等基本数据类型在参数传递时并没有传进变量本身,

    而是创建了一个新的相同数值的变量, 函数修改这个新变量并没有影响原来变量的数值,这也是按值传递的特点

    那为什么对象a的数据就改变了呢?

    因为虽然也是按值传递, 复制了一份新的引用但是指向的对象是同一个,修改后会影响原对象

    这种方式假如在函数内修改 a=null; 只是把复制的引用与对象的联系断开,不影响函数外与实际对象

    这就是按值传递, 即使传的是引用也不是引用传递,

    因为引用传递是不复制的,直接使用参数,如下图:

    这时候函数把指针a=null就指针就置空了,函数外也无法再通过指针访问对象了

    这样可以理解了吗,自我觉得足够明白了, 我如此深厚的画图功底都供出来了,再不明白就是在为难我胖虎!

    水平有限, 可能有错误,敬请指出!

    更多关于java相关内容感兴趣的读者可查看本站专题:《Java常用函数与方法技巧汇总》、《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

    希望本文所述对大家java程序设计有所帮助。


    广而告之:
    热门推荐:
    微信小程序开发入门基础教程

    微信小程序开发入门基础教程 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果。 开发准备工作获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的“设置”-“开发者设置”中,查看到微信小程序的 AppID 了,注意不可直接使···

    自定义vue组件发布到npm的方法

    本文介绍了自定义vue组件发布到npm的方法,分享给大家,具体如下: 为什么会有这个想法呢,主要是vue项目中自定义的组件在多个项目中使用。导致修改bug的时候,总是要在项目分支中修改,然后同步到主线上,这样容易导致分支修改后没有同步到主线,慢慢的就会导致组件版本不统···

    MySQL绿色解压缩版安装与配置操作步骤

    操作步骤: 一、安装MySQL数据库 1、下载MySQL-5.6.17-winx64.zip文件。 2、解压到指定目录,本例为D:\mysql-5.6.17-winx64。 3、修改配置文件,my-default.ini名称改为:my.ini,文件里面的参数配置:       [mysqld] # 设置mysql的安装···

    phpmyadmin安装时提示:Warning: require

    比较简洁的方法:新建一个目录将phpmyadmin中的文件复制到这个目录中,iis中设置一下路径。 安装好PHPmyAdmin后,在IE里访问时会出现下面的这种错误: Warning: require_once(./libraries/common.inc.php) [function.require-once]: failed to open stream: No such fil···

    AngularJS入门教程之表单校验用法示例

    本文实例讲述了AngularJS表单校验用法。分享给大家供大家参考,具体如下: 表单数据的校验对于提高WEB安全性意义不大,因为服务器接收到的请求不一定来自我们的前端页面,有可能来自别的站点,黑客可以自己做一个表单,把数据提交到我们的服务器(即跨站伪造请求),这样就绕过···

    mysql启动服务报1058错误的解决方法

    今天研究一个框架,数据库使用mysql,启动mysql服务的时候报1058错误,如下图。   在网上找了半天都是一样的解决 办法,试了一遍通通不行(仅针对我本地服务启动出现的问题无效)。网上解决办法如下:、 新启动,却无法启动. 解决方法: ◆1、运行 D:\mysql\bin>m···

    JavaScript对IE操作的经典代码(推荐)

    这段时间一直在用ajax技术做东东,所以也就有更多机会对JavaScript知识进行学习。之前在网上搜集了一些关于JavaScript对IE操作的代码(具体在哪里cope的记不清了,所以出处就不加了),感觉在开发过程中很有用,当然只适用于IE,FF会有问题的。现在贴出来分享。复制代码 ···

    PHP基于socket实现的简单客户端和服务端通讯功能示例

    本文实例讲述了PHP基于socket实现的简单客户端和服务端通讯功能。分享给大家供大家参考,具体如下: 服务器端: <?php set_time_limit(0); $host="localhost"; $port=1001; //创建一个连接 $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cann···

    web打印小结

    项目中有个需求是将winform客户端的打印,移到网页上由客户自行打印,打印要求是根据一定的格式实现套打。 当时的解决方案是使用PDF打印: 1、 准备好套打格式的底图; 2、打开底图,将动态内容画到底图上; 3、利用第二步修改后的图片,生成PDF,完成打印 后来发现一款比较强···