在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
但是对这里实际发生的事情并不了解。
答案 0 :(得分:0)
在Java中,每个Object
的值都是reference。另请参阅JLS-4.3. Reference Types and Values,其中(部分),
答案 1 :(得分:0)
Java有引用,但不是指针。这是一些 Java中的引用和C ++中的指针之间的差异:
引用存储地址。该地址是对象内存中的地址。所以,当一个类被声明时: " PersonClass y = new PersonClass();"," y"变量实际上 将地址存储在内存中。如果你要查看那个地址 在内存中你会看到PersonClass对象的细节。指针 但是,在C ++中,直接指向该对象。
- 醇>
您无法对引用执行算术运算。因此,无法在指针中添加1,但可以在C ++中使用。
http://www.programmerinterview.com/index.php/java-questions/does-java-have-pointers/
答案 2 :(得分:0)
Node node = new Node();
这为新的Node
对象构造和分配内存,返回对此对象的引用,并将此引用分配给变量node
。它与C中的指针非常相似。您可以在不复制的情况下对同一个对象进行多次引用。
与C的主要区别在于JVM将跟踪存在多少有效引用(如node
之类的变量)。当引用计数达到零时,它将自动和异步地删除对象(垃圾收集)。