在发布我的问题之前,我阅读了以下关于java传递值的优秀文章。我相信我对此有很好的理解。
我的问题是通过将Java与支持pass-by-reference的其他语言进行比较(C++可能是),这是一个侧面的问题。
对于Java,有一个句柄(引用)指向位置A中的对象,因此可以修改对象本身。但是不可能改变对象的位置本身。即存储在内存地址0X945中的对象不能更改为0X948。
在C++等语言中,您可以选择pass-by-value或pass-by-reference。(它掌握在程序员手中,对吗?)因此,可以更改对象在内存空间中的位置,对吗?
P.S:我对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++ (我猜想),什么都不会发生,交换就会发生。这可能意味着我正在改变内存中对象的位置,对吗?
发布于 2014-09-17 14:04:12
在java中,对对象的引用是通过值传递的。也就是说,每件事都是按价值传递的。下一首,
您可以选择按值传递或按引用传递。(它掌握在程序员手中,对吗?)。正确。但你不能用Java来做。
存储在内存地址0X945中的对象不能更改为0X948。--您不能同时使用java和C++。
当您试图访问不存在的东西的属性/方法(is NullPointerException )时,会引发NullPointerException。也就是说,当需要对象的实例时,引用指向null。
Object o = null;
o.toString() --> NPE. o points to null.发布于 2014-09-17 15:20:04
因此,在C++中,按引用传递意味着传递对象本身,以便可以在交换方法中重新分配对象。
在C++中,按引用传递,swap(Object &A, Object &B)似乎接近java的传递值。
在Java中,Object A是对对象的引用,默认情况下是null。因为Object已经是一个引用,所以在复制此引用时,它是通过值传递的。
在C++中,Object A是对象的实例,并且始终是唯一的对象。由于Object是一个实例,所以使用Object&通过引用传递,因为Object不是传递的,而是对它的引用。
发布于 2014-09-17 14:03:57
Java总是通过值传递的,只是当您传递对象时,传递的值是内存中的位置,因此它可以像通过引用传递一样。
https://stackoverflow.com/questions/25892659
复制相似问题