[TOC]
值传递:
方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。
引用传递:
也称为传地址。方法调用时,实际参数的引用地址,被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。
Java内部
java只有值传递
,
Java参数,不管是原始类型还是引用类型,传递的都是副本
如果参数类型是原始类型
,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值
,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值
。如果参数类型是引用类型
这个副本存放的是参数的地址1
2
,那么传过来的就是这个引用参数的副本,- 如果在函数中没有改变这个副本的地址,而
是改变了地址中的 值,那么在函数内的改变会影响到传入的参数
。 - 如果在函数中
改变了副本的地址
,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值
。
- 如果在函数中没有改变这个副本的地址,而
Java中基本数据类型和包装类型的区别
1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;基本类型不是
2、包装类型是引用的传递;基本类型是值的传递
3、声明方式不同:
基本数据类型不需要new关键字;
包装类型需要new在堆内存中进行new来分配内存空间
4、存储位置不同:
基本数据类型直接将值保存在值栈中;
包装类型是把对象放在堆中,然后通过对象的引用来调用他们