[@倚贤][¥20]什么是值传递和引用传递?
1、得回忆下C语言
int value = 10; int *pointer; pointer = &value; // 指针poiner引用的value的地址printf('value = %d, pointer = %d n', value, pointer);// 结果是: value = 10, *pointer = 10
value就是个值;*pointer是个指针,其实就是一个引用;pointer = &value 后,pointer值就指向了 value的地址
2、再说说高级语言
简单来说,值传递就是把值类型拷贝一份,引用传递就是把指针(引用)拷贝一份。
Integer num = 10; // 基本概念: Integer是引用类型,int是值类型。int value = num; // 值传递Integer pointer = num; // 引用传递
再进一步的,高级语言中自定义类对象都是引用类型。
public class MyClass {
private int value;
// getter, setter ...
}
MyClass inst1 = new MyClass(); // 引用类型,存放在堆上inst1.setValue(10);
MyClass inst2 = inst1; // 引用传递int value = inst1.getValue(); // 值传递
像C#中的委托(一个函数的指针)也是引用类型,各种 = 赋值操作都是引用传递了。要想再深入理解,就去看看内存模型,像Java、C#都有“堆”和“栈”的概念,学习下值类型和引用类型在内存模型中的存放规则。
赞0
踩0