改变Java中对象的地址(pass
在发布我的问题之前,我已阅读了关于java-pass-by-value的以下优秀文章。 我确信我已经很好地理解了。
我的问题与Java与其他支持pass-by-reference
语言( C++
可能)之间的边界比较有关。
在Java
情况下,你有一个句柄(引用)指向位置A中的对象,所以对象本身可以被修改。 但是不可能改变物体位置本身。 即存储在内存地址0X945中的对象不能更改为0X948。
在诸如C++
,您可以选择pass-by-value
pass-by-reference
或pass-by-reference
。 (它在程序员手中是正确的?)。 因此,可以正确更改内存空间中对象的位置?
PS:我在Java上有很好的背景,但在C ++上。 所以我上面的观点可能是错误的。 在上面我引用的文章1中声称,Java中没有指针的概念。 我不知道这有多远? (为什么存在NullPointerException
呢)
编辑:考虑这个例子:
void swap(Object A,Object B) {
Object temp=B;
Object B=A;
Oject A=temp;
}
当我调用Java中的方法(如swap(A,B)
,除C ++(我认为)之外没有任何事情发生,交换发生。 这可能意味着我正在改变内存中对象的位置是否正确?
在Java甚至 - 对象的引用是通过值传递。 即一切都是按价值传递的。 下一个,
您可以选择通过值传递或通过引用传递。 (它在程序员手中是正确的?)。 正确。 但是你不能用Java来完成。
存储在内存地址0X945中的对象不能更改为0X948。 你不能在java和C ++中都这样做。
当您尝试访问某个不存在的属性/方法(为null
)时,会抛出NullPointerException
。 即,当需要对象的实例时,参考点为null
。
Object o = null;
o.toString() --> NPE. o points to null.
所以在C ++中,传递引用意味着您传递对象本身,以便它可以在swap方法中重新分配
在C ++中,通过引用传递, swap(Object &A, Object &B)
看起来接近java的按值传递。
在Java中, Object A
是对对象的引用,默认情况下为null
。 由于Object
已经是一个引用,所以当这个引用被复制时,它是通过值传递的。
在C ++中, Object A
是Object A
一个实例,并且始终是唯一的对象。 由于Object
是一个实例,因此您使用Object&
通过引用传递,因为该Object
没有通过,而是对它的引用。
Java总是按值传递,就是当你传递对象时,传递的值是内存中的位置,所以它可以像传递引用一样行事。
链接地址: http://www.djcxy.com/p/20669.html上一篇: changing address of object in Java (pass
下一篇: Why does the specified object be eligible for garbage collection?