【发布时间】:2015-10-19 01:19:04
【问题描述】:
我试图了解 java 中的引用类型和 C 中的指针之间的区别。
我用 C 和 Java 编写了以下两个程序。
C:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int *p;
int *q;
int a = 5;
p = &a;
q = p;
printf("before q: %p\n",q);
p = NULL;
printf("before p: %p\n",q);
return 0;
}
这里 p & q 都指向同一个位置。现在 p 中的任何影响都不会影响 q。
Java:
class BoxDemo
{
int width;
int height;
int length;
}
class Box {
public static void main(String[] args) {
BoxDemo b1 = new BoxDemo();
BoxDemo b2 = b1;
System.out.println("after: b2: " + b2);
b1 = null;
System.out.println("before: b2: " + b2);
}
}
这里 b1 和 b2 指向同一个位置。但是,在 b1 中所做的更改不会反映在 b2 中。
那么,引用和指针这两种类型有什么区别呢?两者都一样吗?
【问题讨论】:
-
您取消了
b1引用,您没有对值b1引用进行任何更改。 -
那么,b2的值不应该也为null吗?
-
你的c和java代码不一样。你在哪里将指针设置为你的 c 代码中的空值?
-
在您的 Java 代码中,您使
b1和b2引用同一个对象,然后将b1设置为null。为什么您期望重新分配一个变量来更改另一个变量引用的内容?