C ++视角下的Java对象和指针

时间:2014-08-02 06:07:55

标签: java c++

我最近阅读了这篇文章:Is Java "pass-by-reference" or "pass-by-value"?

第一个答案太过简洁和具体,无法给我一个坚定的理解,其他人创造了15篇论文,解释了什么应该是一个简单的话题。以下规则是否正确(如果是真的则非常简单):

1。)与非基元类型相关联的命名事物(Java talk中的“对象引用”)是C ++中的指针。

2。)。在Java指针上与使用 - >相同在C ++指针上。

3。)=在Java指针上与在C ++指针上使用=相同。

4.)所有函数都按值传递(因此按值传递Java指针)。

(这忽略了内存管理上的差异,比如在Java指针上的=很好而在C ++指针上= =意味着你可能需要担心内存管理)

这个谜题中最令人困惑的因素是,我所见过的任何人都没有传达这套规则/理解Java正在用清晰的英语做什么(选择15页和图表)。第二个最令人困惑的元素是Java使用“引用”一词的方式与C ++不同。如果你想要用C ++来表达Java之间的类比,那么指针和我创建的规则是消化Java行为的最简单的术语。

1 个答案:

答案 0 :(得分:2)

第1点是正确的。

Object o = new Object();

变量o存储指向对象在内存中的位置的指针。

第2点也是正确的。

Object o = new Object();

o.hashCode();

这是调用存储在o。

中的对象的方法hashCode

第3点,再次纠正。

Dog d = new Dog();

Dog d2 = new Dog();

System.out.println(d == d2);//This will print false

d2 = d;

System.out.println(d == d2);//This will print true

在第一个输出中,d不等于d2,因为指向对象的指针不同。在第二个输出中,d确实等于d2,因为它们都指向相同的位置。

第4点在技术上是正确的。

原语按值传递。 一个 将对象传递给函数时,它将指针的副本传递给对象,而不是复制到对象本身。指向对象的指针正在通过值传递给函数。希望这段代码可以帮助解释它。

public void example(int i, Object o) {}

public static void main(String[] args) {

    Object o = new Object();

    example(3, o);//This is passing the number 3 to the function. It also passes by vlue a pointer to where object o is stored in memory.
}