改变Java中对象的地址(pass

在发布我的问题之前,我已阅读了关于java-pass-by-value的以下优秀文章。 我确信我已经很好地理解了。

  • Java是“通过引用传递”还是“按值传递”?
  • http://www.javaworld.com/article/2077424/learn-java/does-java-pass-by-reference-or-pass-by-value.html
  • 我的问题与Java与其他支持pass-by-reference语言( C++可能)之间的边界比较有关。

    Java情况下,你有一个句柄(引用)指向位置A中的对象,所以对象本身可以被修改。 但是不可能改变物体位置本身。 即存储在内存地址0X945中的对象不能更改为0X948。

    在诸如C++ ,您可以选择pass-by-value pass-by-referencepass-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 AObject 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?