java中的null类型---有关null的9件事

        今天听到一个问题,java中的null类型,null竟然是一种类型

           java语言中有两种类型,一种是基本类型,还有一种是引用类型。还有一个特殊的null类型即表达式null的类型,它没有名字。

            因为null类型没有名字,所以不可能声明为null类型的变量或者转换为null类型。

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

            null引用可以转换为任意引用类型。

            实际上,程序员可以忽略null类型,可以认为null仅仅是一个可以称为任何引用类型的特殊符号。

            一个null类型(null(空)引用是这种类型的唯一的一个值),可以赋值给任意类型,将返回一个该类型对象的空引用(其实还是null)。


            对于java程序员来说,null是令人头痛的东西。时常会受到空指针异常的骚扰。所以要好好了解一下null,确保正确使用null。

        关于null的9件事

    1)    首先,null是java中的关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别他们然后报错。

               现在,当你在敲代码的时候,IDE可以纠正这个错误。

    2)     就像每种原始类型都有默认值一样,int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将false作为自己的默认值,java中的任何引用变量都将null作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你)。


        这对静态和非静态的object来说都是正确的。就像你在这里看到的这样,myObj定义为静态引用,所以可以在主方法里直接使用它。注意:主方法是静态方法,不可使用非静态变量。

        3)     要澄清一些误解,null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,


        可以看到idea并没有报错,可以正常编译。在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。

        4)    null可以赋值给引用变量,不能将null赋值给基本类型变量,如int、double、float、boolean。

        可以看到,直接将null赋值给基本类型会出现编译错误。但将null赋值给包装类object,然后将object赋给各自的基本类型,编译不会报错,但运行会空指针,这是自动拆箱导致的。

        5)    任何含有null值的包装类在java拆箱生成基本数据类型时候都会抛出一个空指针异常。

                    

                   这段代码看起来非常简单并且没有错误。你所做的一切是找到一个数字在数组中出现了多少次, 这是Java数组中典型的寻找重复的技术。开发者首先得到以前的数值,然后再加一,最后把值放回Map里。程序员可能会以为,调用put方法时,自动装箱会自己处理好将int装箱成Interger,但是他忘记了当一个数字没有计数值的时候,HashMap的get()方法将会返回null,而不是0,因为Integer的默认值是null而不是0。当把null值传递给一个int型变量的时候自动装箱将会返回空指针异常。设想一下,如果这段代码在一个if嵌套里,没有在测试环境下运行,但是你一旦放在生产环境里,BOOM:-),是不是美兹兹。

                6)     如果使用了带有null值的引用类型的变量,instanceof操作会返回false

                    

                    这是instanceof操作一个很重要的特性,使得对强制类型转换检查很有用

                    7)    可以使用静态方法来使用一个值为null的引用类型变量。因为静态方法使用静态类型绑定,不会抛空指针异常

                       

                      8)        可以将null传递给方法使用,这时方法可以接收任何引用类型,如 public void print(Object obj) 可以这样调用print(null).编译可以通过,但结果就取决去你的方法了。这个例子中的print方法,不会抛出空指针异常,只是退出,业务逻辑允许的话,推荐使用null安全的方法。

                    9)    可以使用== 或者 != 操作来比较null值,但是不能使用其他算法或者逻辑操作,如大于、小于。与SQL不同,java中的null==null会返回true;

                



                 避免空指针异常可以使你的代码变的null安全。

                 敲黑板,划重点!!!!——————>null是任何一个引用类型变量的默认值,在java中不能使用null引用来调用任何instance方法或者instance变量。

  • 40
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
java类型ps -ef|grep java的命令是用于查看当前所有包含"java"关键字的进程。这个命令可以通过在终端输入"ps -ef | grep java"来执行。其,"ps -ef"命令用于显示当前所有进程的详细信息,而"grep java"命令则是用于查找与"java"关键字匹配的进程。通过这个命令,我们可以方便地查看与Java相关的进程信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux 下java jps命令使用解析详解](https://download.csdn.net/download/weixin_38663167/14046926)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【Linux】- ps -ef |grep 命令](https://blog.csdn.net/weixin_42300879/article/details/117007840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [linux ps -ef | grep java命令](https://blog.csdn.net/weixin_35756892/article/details/129451363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值