我是JavaScript的新手,我认为对象是通过引用传递的。
我期望的输出是:
{ one: 1 } { one: 1 }
{ two: 2 } { two: 2 }
获得的输出:
{ one: 1 } { one: 1 }
{ two: 2 } { one: 1 }
当b
引用a
的地址时,为什么b
仍然{one:1}
null
js lang-js prettyprint-override">var a = {one:1}
var b = a
console.log(a,b)
a = {two:2}
console.log(a,b)
null
下面我们一一分析一下:
var a = { one: 1 } // 'a' points now to (example) location: #fff
var b = a // 'b' points to the same location: #fff
现在,当您将新对象设置为a
:
a = { two: 2 }
A
现在指向内存中的新位置(例如,#ff1
),它不会影响B
的位置,它仍然指向#fff
。这就是为什么最后一个console.log(a,b)
调用会给出{two:2}{one:1}
输出。
当您执行b=a
时,所以现在b
与a
具有相同的引用
但当您为a
指定新值时
a = { one : 2 }
它为值({one:2}
)创建了一个新的内存引用,并用a
变量对其进行标记,因此您可以使用a
引用内存引用并获取值。但是b
仍然保留a
的初始引用,该引用的值为{one:1}
但是当我给另一个人指定了彼得的引用,然后改变了彼得的名字时,这个人不知道这一点,并打印了第一个名字。既然它存储了Peter的内存引用,这怎么可能呢?难道它不能跟随对它所做的更改吗?
是否有调用ObjectLong.longValue()方法来比较Long和Long或其他方法?
在Java中 作为包装类。当它只是一个对象引用时,它是如何初始化的?有人能解释一下吗?
考虑下面的代码: 对于上面的代码,输出是:
我已经看到了“this”关键字在函数中是如何工作的?,但我没有看到它回答了下面的问题。 给定此代码: 为什么前两次尝试失败,后两次却奏效?如果未绑定到当前对象文字,那么它绑定到什么?
可能的重复: C++中指针变量和引用变量有什么区别? 这让我很困惑: 在C语言中&通常表示VAR的地址。这里是什么意思?这是指针符号的一种别致方式吗? 我之所以假设它是一个指针符号,是因为这毕竟是一个指针,我们正在检查两个指针是否相等。 我在cplusplus.com上学习,他们有这个例子。