函数的参数都是形参,只有在函数调用的时候系统才会为形参分配空间和地址,形参和实参不会是同一个内存地址
函数传参的值传递和地址传递 例:int a = 1; a在内存中的地址假设是0x001 值传递:传递的变量的值,就是传递的是1这个值 地址传递:传递的是变量的地址,就是传递的是0x001这个地址
基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的,对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。
例如int、double等基本类型是值传递,其它都是址传递,注意基本类型对应的Integer、Double都是对象,也是址传递。
首先要说明的是java中是没有指针的,java中只存在值传递,只存在值传递!!! 然而我们经常看到对于对象(数组,类,接口)的传递似乎有点像引用传递,可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽,实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。
址本身就是值,java不是纯粹的OO语言,存在8种基本类型(非对象),这些类型是传递本身,其他是传递对象地址值。注意,地址值得传递不是C++中引用传递
先看表象,输入参数中有一个基本类型的参数,一个封装类型的对象,在方法体中修改了以上2个参数;
1.方法退出后这2个参数,在主方法中值会变化吗?
2.思考下这2个参数在内存当中存在什么那块区域上
考虑清楚以上2个问题,你就明白了
首先要说明的是java中是没有指针的,java中只存在值传递,只存在值传递!!! 然而我们经常看到对于对象(数组,类,接口)的传递似乎有点像引用传递,可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽,实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。
很简单分辨,JAVA变量如果类型是小写字母的,就是值传递(数组除外)。
其他类型是大写字母开头的对象,以及数组(int [ ] / byte [ ] 这类)都是址传递。
值传递相当于复制一份变量,方法内修改了变量,方法外不会感知到,因为修改的是复制品。
址传递相当于同一个变量传递进去,方法内修改了变量,方法外会感知到,因为修改的是同一个东西。
按值传递:基本类型变量-按值传递,按值传递通过复制获取参数的副本,
基本类型:六种数字类型(四个整数型(默认是int 型),两个浮点型(默认是double 型)),一种字符类型,一种布尔型。
按址传递:引用类型变量-按址传递,按址传递通过传递对象的引用地址
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。