值类型和引用类型是两种内存分配方式, 值类型是在调用栈上分配, 而引用类型是在堆上分配. 一个是描述的内存分配方式, 一个是描述参数求值策略, 二者并无依赖和约束关系....求值策略关注的点在于, 表达式在调用函数的过程中, 求值的实际, 值的形式的选取等问题. 求值的时机, 可以在函数调用之前, 也可以在函数调用之后, 由被调用者自己求值....对于值传递, 无论是值类型还是引用类型, 都会在调用栈上创建一个副本, 不同的是, 对于值类型而言, 这个副本本身就是原始值的全部复制, 而对于引用类型而言, 由于引用类型的实例在堆上, 所以栈上只有他的一个引用...如果把所有东西都抽象成值, 从数据考虑问题, 那就根本没有必要来引入求值策略这一概念了.
在C#中, 可以通过来ref/out来实现引用传递, 没有ref/out就是值传递....几个解释
针对于上文的几个误区, 我们来一一进行解释:
引用传递是指的求值方式, 而不是说Java的参数类型是对对象的引用. 并且Java在函数调用时, 是通过值传递的方式, 传递引用的副本.