java学习02-传值调用和传址调用
来源:互联网 发布:数据科学入门 mobi 编辑:程序博客网 时间:2024/05/22 02:29
传值调用
传值调用不会改变变量的值,在函数弹栈后,原变量的值不变。
class Demo
{
public static void main(String[] args)
{
int x = 6;
show(x); //在此函数进栈(被调用)时,x值得暂时会变成5,在函数弹栈(调用结束)后,变量的值依旧是6。
System.out.println(x);
}
publicstatic void show(int x) //这里的x仅仅只是一个参数而已,实际上这里把x换成abcd什么都行
{
x= 5;
}
}
Q:为什么传值调用没有改变原变量的值?
A:实际上,在执行show(x)时,传入括号里的x是原变量的一个副本,在show函数内部只是改变了x的副本,在show弹栈后,改变的副本就消失了,原来“真身”x是没有发生任何变化的。
此处贴上相应的C++代码供理解。
上面的代码里,传入show的是x的副本,用a代表。a是5,和原来x是几并没有关系,所以值不变,依旧是5。
传址调用
传址调用会改变变量的值,在函数弹栈后,原变量的值改变。
class Demo
{
int x = 6;
public static void main(String[] args)
{
Demo d = new Demo();
d.x = 8;
show(d); //此函数被传入的参数值为对象d的地址,函数对地址的操作
//是永久性的,在该函数弹栈后,原变量值发生改变。
System.out.println(d.x);
}
public static void show(Demo d) //被传入的参数值为对象d的地址,
{ //该函数操作d的地址,将其成员变
d.x = 5; //量x的值更改为5,改变是永久性的
}
}
Q:为什么传址调用改变了原变量的值?
A:在执行show(Demo d)时,传入括号里的是对象d的地址,对地址的操作就是对内存的操作,它不像操作变量值的副本一样,在函数出栈后副本就消失,对地址的操作会直接永久性的改变内存中的值。
处贴上相应的C++代码供理解。
上面的代码里,传入show的是x的地址,用a代表。对地址a的操作就是对原变量所在内存的操作,改变是永久性的。
- java学习02-传值调用和传址调用
- Java传值调用
- 传值调用和引用调用
- 传值调用和引用调用
- scala传值调用和传名调用
- 引用调用和传值调用
- 函数参数的传值调用和传址调用
- 关于传值调用和传址调用的说明
- 函数的传值调用,传址调用和引用调用分析
- Java中的形参和实参的区别以及传值调用和传引用调用
- Java中的形参和实参的区别以及传值调用和传引用调用
- Java中的形参和实参的区别以及传值调用和传引用调用
- C语言函数调用三种方式:传值调用,引用调用和传地址调用
- C语言函数调用三种方式:传值调用,引用调用和传地址调用
- C语言函数调用三种方式:传值调用,引用调用和传地址调用
- C语言函数调用三种方式:传值调用,引用调用和传地址调用
- C语言函数调用三种方式:传值调用,引用调用和传地址调用
- C语言函数调用三种方式:传值调用,引用调用和传地址调用
- VUe安装的时候遇到的二个报错。vue@2.2.2 vue-template-compiler@2.3.4 npm 2.15.1 should be =>3.0.0
- 最小生成树
- Python 多线程编程
- 版本控制
- JAVA card 应用开发(五) JCOP的调试方法
- java学习02-传值调用和传址调用
- Android下同时使用WIFI与移动网络时保证优先使用移动网络
- JVM内幕:Java虚拟机详解
- css及html
- 扩增子图表解读5火山图:差异OTU的数量及变化规律
- mysql 获取下级成员函数
- 系统权限设计与实现入门
- MyBatis初始
- sqlserver索引的原理和应用