2016年03月20日 归档

Java方法究竟是值传递还是引用传递?

一直以来,Java地址引用概念的影响,认为Java传参分为值传递和引用传递,最近因为追究JavaScript的传递方式,遂翻出Java相关资料看了一下,发现原来这么久一直理解错了。Java中只有按值传递,没有按引用传递!

这里同样涉及到堆与栈的概念,至于区别,这里就不再赘述了,和JavaScript的说法类似,可以参考前面的《JavaScript函数究竟是值传递还是引用传递?》。

对于这个问题,网上说法各异,《Core Java》的作者,以及JAVA的创造者James Gosling都认为当一个对象或引用类型变量被当作参数传递时,也是值传递,这个值就是对象的引用,因此JAVA中只有值传递,没有引用传递。还有一种说法是引用可以看作是对象的别名,当对象被当作参数传递时,传递的是对象的引用,因此是引用传递。当然,也有《Thinking in Java》作者Bruce Eckel站在了中立的立场上。 查看更多...

JavaScript函数究竟是值传递还是引用传递?

很多人认为 JavaScript中函数进行参数传递有两种方式:基础类型值传递;对象类型按引用传递。很长一段时间我也这样认为,其实都是一种值传递。

事情是在近期QQ群里偶尔聊到,JavaScript函数传值到底是值传递还是引用传递,看到有人说都是值,原因即使是对象也是传了对象的拷贝,即对象的值本身。本着对技术的刨根问底儿的精神,查了相关资料,得到结论:ECMAScript中所有函数的参数都是按值来传递的

下面是一些相关概念的解释,整理自网络:

众所周知,在JavaScript中数据类型可以分为两类:

原始数据类型值 primitive type,比如Undefined,Null,Boolean,Number,String。

引用类型值,也就是对象类型 Object type,比如Object,Array,Function,Date等。 查看更多...