Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是null:Java?_Java_Null - Fatal编程技术网

什么是null:Java?

什么是null:Java?,java,null,Java,Null,我正在阅读Patrick Nouton的Java手册 书中说:当您将变量的类型声明为类时,它的默认值为null,这是Object类型的引用,因此类型与所有其他类兼容。空对象没有值;它与整数0不同,就像布尔值的false一样 我无法理解/混淆突出显示的部分,它是否说null是Object类型的变量 第107页 这是一个参考值,不是参考变量。任何引用类型的变量的值都可以为null。在Java中,所有变量都是引用类型或基本类型int、char、float等。。当你开始谈论泛型时,也有类型变量 以下是报

我正在阅读Patrick Nouton的Java手册

书中说:当您将变量的类型声明为类时,它的默认值为null,这是Object类型的引用,因此类型与所有其他类兼容。空对象没有值;它与整数0不同,就像布尔值的false一样

我无法理解/混淆突出显示的部分,它是否说null是Object类型的变量

第107页 这是一个参考值,不是参考变量。任何引用类型的变量的值都可以为null。在Java中,所有变量都是引用类型或基本类型int、char、float等。。当你开始谈论泛型时,也有类型变量

以下是报告的相关部分:

Java编程语言中有两种类型:基元类型§4.2和引用类型§4.3。相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作:原始值§4.2和参考值§4.3

还有一种特殊的null类型,即表达式null§3.10.7、§15.8.1的类型,它没有名称

因为null类型没有名称,所以不可能声明null类型的变量或强制转换为null类型

null引用是null类型表达式的唯一可能值

空引用始终可以进行到任何引用类型的扩展引用转换

实际上,程序员可以忽略null类型,而只是假装null只是一个特殊的文本,可以是任何引用类型

编辑以回应您的评论:我认为Java手册中的语言有点离谱。值null不是Object类型的引用;它是空类型的引用。规范中的关键点是空引用始终可以进行扩展引用转换为任何引用类型。从某种意义上说,这正是客体的对立面。对象引用是最广泛的引用类型;空类型也是说得有点松散,最窄。特别是,将Object类型的引用指定给任何其他引用类型的变量是一种缩小转换,它需要显式强制转换,并可能引发ClassCastException。将空引用分配给任何引用类型的变量不需要强制转换,也不会引发异常

请注意,任何命名引用类型都不能具有null类型的行为。实际上没有最窄的类型,因为Java中的命名类型系统没有这样的类型。不可能定义一个既可分配给字符串变量又可分配给双变量的引用类型。只有null类型具有该属性。引用类型转换的常规规则不允许这样做,这就是为什么它在Java语言规范中有一个单独的规则。

它是一个引用值,而不是一个引用变量。任何引用类型的变量的值都可以为null。在Java中,所有变量都是引用类型或基本类型int、char、float等。。当你开始谈论泛型时,也有类型变量

以下是报告的相关部分:

Java编程语言中有两种类型:基元类型§4.2和引用类型§4.3。相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作:原始值§4.2和参考值§4.3

还有一种特殊的null类型,即表达式null§3.10.7、§15.8.1的类型,它没有名称

因为null类型没有名称,所以不可能声明null类型的变量或强制转换为null类型

null引用是null类型表达式的唯一可能值

空引用始终可以进行到任何引用类型的扩展引用转换

实际上,程序员可以忽略null类型,而只是假装null只是一个特殊的文本,可以是任何引用类型

编辑以回应您的评论:我认为Java手册中的语言有点离谱。值null不是Object类型的引用;它是空类型的引用。规范中的关键点是空引用始终可以进行扩展引用转换为任何引用类型。从某种意义上说,这正是客体的对立面。对象引用是最广泛的引用类型;空类型也是说得有点松散,最窄。特别是,将Object类型的引用指定给任何其他引用类型的变量是一种缩小转换,它需要显式强制转换,并可能引发ClassCastException。将空引用分配给任何引用类型的变量不需要强制转换,也不能引发异常 激动

请注意,任何命名引用类型都不能具有null类型的行为。实际上没有最窄的类型,因为Java中的命名类型系统没有这样的类型。不可能定义一个既可分配给字符串变量又可分配给双变量的引用类型。只有null类型具有该属性。引用类型转换的常规规则不允许这样做,这就是为什么它在Java语言规范中有一个单独的规则。

来自:

null类型有一个值,null引用,由 null文本null,由ASCII字符构成

发件人:

null类型有一个值,null引用,由 null文本null,由ASCII字符构成


谢谢你…你的回答很有道理,但如果null表达式的类型是null…为什么它说null是Object类型的引用!?对象从何而来?@sushankr-我更新了我的答案以回应你的评论。谢谢你…你的答案很有道理,但如果null表达式的类型为null…为什么它说null是Object类型的引用!?对象从何而来?@sushankr-我更新了我的答案以回应你的评论。谢谢你…你的答案很有道理,但如果null表达式的类型为null…为什么它说null是Object类型的引用!?对象从何而来?@SushantKr java中的每个对象都有默认值null。在本例中,对象可以是任何对象,甚至是您创建的对象、字符串、对象或其他..:它是Object类型的引用,因此与所有其他类的类型兼容,如果我没有错的话,它引用的是'null'?@sushankr Object typeany对象,比如string。。。。引用null,这就是为什么当您调用对象行为方法时,您会得到一个NPE,而不是初始化当对象有其默认值时,即nullThank-u…您的答案很有意义,但如果null表达式的类型为null…为什么它说null是object类型的引用!?对象从何而来?@SushantKr java中的每个对象都有默认值null。在本例中,对象可以是任何对象,甚至是您创建的对象、字符串、对象或其他..:它是Object类型的引用,因此与所有其他类的类型兼容,如果我没有错的话,它引用的是'null'?@sushankr Object typeany对象,比如string。。。。引用null,这就是为什么当调用对象行为方法时,当对象具有默认值(null)时,如果未初始化,则会得到NPE