新创建的对象是否为我提供了内存位置或指针,其中包含新分配的内存位置的地址

时间:2015-10-18 20:30:47

标签: java c oop pointers

在Java中创建一个新对象时,它是否为我提供了一个内存位置,还是给了一个包含内存位置地址的指针。

在C中,我会做

typedef struct node
{
 int data;
 struct node* left;
 struct node* right; 
}Node;

为了得到一个新节点,我会做

Node* node = malloc(sizeof(Node))

要访问内部成员,

I do node->data, node->left and node->right

要获得一个新节点,我还可以做Node节点;并以

的身份访问成员
node.data. node.left and node.right

在Java中,我只是做

class Node
{
    int data;
    Node left;
    Node right;

    public Node(int data)
    {
        this.data = data;
        left = null;
        right = null;
    }
}

为了创建一个新节点,我做

Node node = new Node();

节点是一个指针,它保存所分配的实际内存的地址,或者它是分配的实际内存。我很困惑,因为我只需要做

node.data, node.left and node.right

但是对这里实际发生的事情并不了解。

3 个答案:

答案 0 :(得分:0)

在Java中,每个Object的值都是reference。另请参阅JLS-4.3. Reference Types and Values,其中(部分),

  

有四种引用类型:类类型(§8),接口类型(§9),类型变量(§4.4)和数组类型(§10)。

答案 1 :(得分:0)

  

Java有引用,但不是指针。这是一些   Java中的引用和C ++中的指针之间的差异:

     
      
  1. 引用存储地址。该地址是对象内存中的地址。所以,当一个类被声明时:   " PersonClass y = new PersonClass();"," y"变量实际上   将地址存储在内存中。如果你要查看那个地址   在内存中你会看到PersonClass对象的细节。指针   但是,在C ++中,直接指向该对象。

  2.   
  3. 您无法对引用执行算术运算。因此,无法在指针中添加1,但可以在C ++中使用。

  4.   

http://www.programmerinterview.com/index.php/java-questions/does-java-have-pointers/

答案 2 :(得分:0)

Node node = new Node();

这为新的Node对象构造和分配内存,返回对此对象的引用,并将此引用分配给变量node。它与C中的指针非常相似。您可以在不复制的情况下对同一个对象进行多次引用。

与C的主要区别在于JVM将跟踪存在多少有效引用(如node之类的变量)。当引用计数达到零时,它将自动和异步地删除对象(垃圾收集)。