java语法的模糊
代码运行提交正确了,但在自己编写程序时,对于 Node == null 产生了疑惑
这里的Node就是一个结点变量,如果理解java语法正确的话,Node它只是一个自己设计的结点类型的变量,他是指向一个结点空间的,也就是我们new的那一块。
我的疑问是,那么这个Node只是实例的类对象,Node == null ,这说明什么呢?是Node没有指向任何一个实际的结点吗,就相当于只是 private ListNode Node; 单纯实例化一个类对象变量(我表述的可能不准确),没有创建一个真实的结点空间。
):把问题写出来,一步步理,好像就想通了
正在回答
我不确定你是不是有 C/C++ 的基础,如果有的话,可能就会清晰很多。
用 C/C++ 的语言说,就是 Java 中的所有(注意是所有)类对象,本质其实都是一个指针。但是,在 Java 中叫引用。所以,所有的类对象,都可以指向空,当然,也可以指向一个具体的类对象。
如果你没有 C/C++ 的基础,就不用管上面我说的“指针”的概念了,直接使用下面的理解。
=========
如果从内存的角度看,new 操作真正创造了承载实体变量的内存空间,并且初始化了这个内存空间。所以你可以看到,所有的类对象,在创建的时候,都是 X x = new X() 的样子。其本质是,让 x 这个变量,指向了 new 出来的内存地址。否则的话,x 没有指向任何内存地址,就是空。
注意,我说的是所有“类对象”。但是对于基本数据类型,不需要 new。比如我们直接写 int a = 5 就可以。而不用 new。为什么,因为 int 是基本数据类型。此时,a 存储的是值,而非引用(址)。
区分值和址,是计算机专业学习任何语言都会接触,并且是非常重要的一个概念。有些语言这个概念在具体层面上会比较复杂(C/C++ 就比较复杂。)有些语言相对简单很多。Java 其实就简单很多。因为除了基本数据类型,其他的都是引用(址)。
Java 的基本数据类型就 8 个。
整数类型:byte,short,int,long.
浮点数类型:float,double.
字符类型:char.
布尔类型:boolean.
除了这把基本类型的变量,你看到的所有的变量,都是指向一个内存空间,这个内存空间才真正存储了“内容”,变量名称只是为了获取这些内容的一个“箭头”(地址)而已。箭头可以指向空。
我不确定我这样解释你是否能理解。但很有可能,从概念层面你理解了,但是,在具体编程中,你还会因为对这个概念理解的不够深刻,而犯一些错误。这是很正常的。当饭这些错误的时候,我们可以再修改这些错误的时候,回过头再来体会这个概念,对这个概念的理解就会越来越深刻。这就是学习的过程:)
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星