Java新人,今天试着运行了这段代码:
(https://img2022.cnblogs.com/q/2399952/202203/2399952-20220304171058268-1259491345.jpg)
我想问的是:既然==比较引用类型时比较的是内存地址,那如上图所示结果为true是不是就意味着node和node1两者的null值放在同一内存空间?JVM给null也分配了一个可以公共访问的内存空间,就像常量池那样的区域?
node为null时,未指向任何引用,之所以返回true,是因为==方法在两者都为null时直接返回true
堆栈内存
Person a = null
a 栈区有分配空间(但是一般不称呼为开辟内存,通常堆区分配内存称为开辟内存)
a 的值null可以理解为像基本类型0,具体看java内部null如何定义null值
a = new Person()
new开辟对象Person堆区内存, =号将新对象的地址值赋值给a,地址是个4字节int数值
a = null
b = null
a == b 很简单 就像a = 0,b = 0,把0替换为null一个固定值,比较值就可以
上面回答的不够准确,再补充:
– hello_blog 2年前null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将false作为自己的默认值,Java中的任何引用变量都将null作为默认值;
null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型;
null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean;
null特殊值
@hello_blog: 👍
– renguanyu 2年前