gpt4 book ai didi

java - java中的引用类型和C中的指针的区别

转载 作者:行者123 更新时间:2023-11-30 17:09:38 25 4
gpt4 key购买 nike

我试图理解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 中所做的更改不会反射(reflect)在 b2 中。

那么,引用和指针这两种类型有什么区别呢?两者一样吗?

最佳答案

null引用,而不是值。考虑类似的事情

class BoxDemo {
public int width;
public int height;
public int length;

@Override
public String toString() {
return String.format("%d x %d x %d", width, height, length);
}
}

然后在将引用分配给b2后修改b1.width。类似的东西

public static void main(String[] args) {
BoxDemo b1 = new BoxDemo();
b1.width = b1.height = b1.length = 100;
BoxDemo b2 = b1;
b1.width = 2;
System.out.println(b2);
}

输出为

2 x 100 x 100

因为b2引用与b1相同的BoxDemo实例。

关于java - java中的引用类型和C中的指针的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33205185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com