Java中类数据类型的意义是什么?

5

新手问题。

我已经学习基础编程一段时间了,但我对于类数据类型的理解有些困难。

当我们写int a = 9;时,它意味着a是一个int类型的变量,只能包含整数。

同样的,String、boolean、double、float等也是如此。

但考虑以下代码:

Class Node {

Node next = null;
int data;

public Node(int d){ data = d; }

void append(int d)
    {
        blah blah blah
        ..............
    }
}

Node next = null; 是什么意思?我可以理解创建一个对象需要的努力,但是这句话让我感到困惑。

Node next = new Node();

然后尝试操作下一个对象。

4个回答

7
这段代码:
Node next = null;

声明一个Node类型的变量。由于Node是一个类,因此next的值始终是一个引用——它可以是Node或其子类的对象引用,也可以是null引用,它不指向任何对象...在这种情况下,变量的值开始时为null

重要的是要理解,next的值永远不是一个Node对象本身......它只是一个引用。所以假设我们有:

Node next = new Node(10);
Node foo = next;

这里,nextfoo是独立的变量,每个变量都有独立的值...但我们已经将next的值赋为foo的初始值,这意味着它们都指向同一个对象。所以如果我们打印foo.data,它将是10。
我喜欢把变量想象成纸片 - 对于引用类型的变量,纸片上写的是房子的地址或单词“null”。如果两张纸上写着相同的地址,它们就指向同一座房子 - 但这两张纸本身是独立的。改变一个变量的值(划掉当前地址并写入另一个地址)不会改变其他变量的任何内容...但对房子本身的更改(例如将门涂成红色)无论使用哪张纸都可见。
请注意,在您的问题中,您将Stringintdoubleboolean混为一谈...但是,intdoubleboolean原始类型(其中变量的值仅为数据本身-数字等),而String是一个类,因此它是一个引用类型。字符串变量的值不是文本本身,而是一个引用。

3
这是一行代码。
Node next = null;

这意味着你定义了一个变量next,它只保存类型(类)为Node的对象的引用。此外,你使用null值对其进行初始化,这意味着尚未创建任何对象

这些变量实际上保存对象的引用,null是一个特殊的值,仅适用于对象,表示你的变量为空。如果next仍然是null,那么像next.append()这样的操作将导致空指针异常。


2
不,next根本不持有对象。它持有引用,而null是一个不指向任何对象的引用。不存在所谓的“空”变量——变量具有明确定义的值,即空引用。 - Jon Skeet
1
我仍然不喜欢这个概念:如果值为 null,那么变量就是“空的”。它是一个完全有效的值,占用相同数量的空间等等——它只是指向没有对象。特别地,值得注意的是,“已经赋值且值为 null”与“尚未被赋值”的变量非常不同。 - Jon Skeet

0

Node next = null 的意思是这个变量被初始化为 null 值,不指向任何内存位置。

因此还没有添加下一个“邻居”节点。


2
不,它已经被初始化了...使用null值。这个变量有一个存储位置,但它的(null)并没有指向任何特定的对象。 - Jon Skeet
是的,这样更好。我认为值得详细说明一下这意味着什么(如我的回答所述),但至少现在是准确的 :) - Jon Skeet
有争议的是,Java引用变量是否真正“指向内存位置”。(我知道有一种JVM实现根本没有将引用实现为指针!) - Stephen C
@Stephen C - 你能否详细解释一下?我正在学习这门语言,对我来说很有趣。 - StKiller

0
Node next = null; 是指向 NodeObject 的一种指针,它类似于声明一个尚未初始化的变量。 在这种情况下,该对象可能稍后被实例化。 如果将已经存在的对象放到 null 值中,并且没有其他引用指向相同的对象,则垃圾回收器会删除它。
引用数据类型可能有些难以理解。当我们说 int a=9 时,它意味着 a 是 int 数据类型,只能包含整数。同样适用于 String、boolean、double、float 等。
请注意,在 Java 中,int 和 Integer 是不同的。int 是原始类型,不是对象。而 Integer 是可以通过 new 运算符实例化的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接