java中方法的参数传递
java中方法的参数传递方式只有一种:值传递;
对于基本类型来说,传递的是实参的副本(值传递),故在方法内修改传递进来的值并不会影响实参本身;
对于引用类型来说,传递进来的是引用变量的副本(也是值传递),因此该副本与实参均是引用变量,他们均可以操作所引用的对象,在方法内通过引用变量对堆区的对象进行操作时均会对该对象有影响。由于传入方法的是实际参数值的副本,因此,参数本身不会受到任何影响!举两个典型例子:
1.以简单选择排序中的交换函数为例:
package practice;
import java.util.Arrays;public class SelectionSort{public static void main(String [] args) {int[] a=new int[5];int n=a.length;for(int i=0;i<n;i++) {a[i]=(int)(Math.random()*100);}System.out.println("原数组是:"+Arrays.toString(a));WrongSwap(a[0],a[1]);System.out.println("WrongSwap后:"+Arrays.toString(a)); swap(a,0,1);System.out.println("swap后:"+Arrays.toString(a)); }static void swap(int[]a,int i,int j) {int temp;temp=a[i];a[i]=a[j];a[j]=temp;} static void WrongSwap(int b,int c) {int temp;temp=b;b=c;c=temp;}
}
原数组是:[14, 82, 75, 66, 62]
WrongSwap后:[14, 82, 75, 66, 62]
swap后:[82, 14, 75, 66, 62]
之所以WrongSwap没有达到交换元素的目的,是因为b,c是基本类型,调用WrongSwap传进去的是a[0],a[1]的值的拷贝,函数调用对它们并没有影响;
而swap达到了交换元素的目的是因为,int[ ]a是引用类型,在参数传递的过程中,系统复制了引用变量a的副本传进方法,由于a只是一个引用变量,故实际操作的还是堆内存中的数组对象.
可参考《java疯狂讲义(第三版)》5.2.2节
2.下面一个例子更形象地说明传给方法的是实参的副本而不是它本身
如果传进去的是实参本身,则调用revive方法后,teemo应该纸箱hp是383的new的Hero,下面画了一个简单的图说明一下方法调用过程中的内存变化,理解粗浅,如有错误敬请指正。
java中方法的参数传递相关推荐
- 两种参数类型_深入理解Java中方法的参数传递机制
形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...
- java中gettext方法_深入理解Java中方法的参数传递机制
形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...
- Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
原文地址:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html 在Java中,所有的对象变量都是引用,Java通 ...
- java中方法的参数传递机制
转载自 :https://www.cnblogs.com/lixiaolun/p/4311863.html 问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果, ...
- java 中方法里的参数_【Java基础】12、java中方法的参数传递机制
无论是什么语言,要讨论参数传递方式,就得从内存模型说起,主要是我个人觉得从内存模型来说参数传递更为直观一些.闲言少叙,下面我们就通过内存模型的方式来讨论一下Java中的参数传递. 这里的内存模型涉及到 ...
- [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递
参考链接: 用Java传递和返回对象 看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型 值传递:引用类型,地址值传递,所 ...
- 大数据笔记2019.5.9 Java中方法的使用
方法: 1.方法的概念:(函数/过程) 封装了一段特定的业务逻辑功能 尽可能的独立,一个方法只让干一件事: 方法可以被反复的重新的调用 减少代码的重复,有利于代码的维护,减少团队开发的成本提高开发的效 ...
- Java中方法重载和方法重写的区别
文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...
- Java中方法参数的传递
Java中方法参数的传递: 众所周知,Java语言中只有值传递,看起来很好理解的一句话,那么来看一个例子: 输出结果: 这是一个经典问题,我想说说自己的理解: 首先,变量sa和sb分别包含一个字符串对 ...
最新文章
- 一起学设计模式 - 观察者模式
- sqlite fts5 编译 xcode other c flags
- Java注释:类、方法和字段注释
- 杭州一高中推刷脸吃饭:8秒搞定;乌海市与上海荷福签署合作协议 进入人工智能矿业安全领域...
- go-文件读写-db
- Dogeswap上线18小时TVL突破300万美金
- vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...
- python关闭文件-python_文件的打开和关闭
- modelsim与quartus仿真的区别
- 如何删除pdf中计算机属性,从 PDF 中删除敏感内容
- web页面实现剪切板图片黏贴功能
- 1937 年阿尔法罗密欧 8C 2900B Berlinetta获选成为全球最负盛名的车辆
- python tkinter 随机抽奖程序
- 【数据库系统】嵌入式SQL语言查询编程
- android加密设备,用于Android手机的加密设备和加密外部SD卡
- oracle hint 强制索引
- 八位“Booth二位乘算法”乘法器
- Elasticsearch 常见问题汇总及解决姿势(后续会持续更新)
- Ymir平台部署安装
- zerotier使用教程_OPENWRT LEDE 配置ZeroTier网络教程
热门文章
- margin的塌陷现象
- JAVA集合框架包含的内容
- ECharts学习总结(五):echarts的Option概览
- 数据结构之【树形结构】复习题
- Direct2D (25) : 将画笔线条所占用的区域转换为路径 - ID2D1Geometry.Widen()
- NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...
- 数据库正常运行,突然变慢的解决思路
- 闭包 | 浅谈JavaScript闭包问题
- django admin扩展 相关备忘录
- 【Node核心模块HTTP】