摘自 https://blog.csdn.net/qq_25077777/article/details/80174763

今天听到一个问题,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变量。

转载于:https://www.cnblogs.com/xinruyi/p/11186151.html

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

  1. 在Java中确定文件类型

    以编程方式确定文件的类型可能非常棘手,并且已经提出并实现了许多基于内容的文件标识方法. Java中有几种可用于检测文件类型的实现,其中大多数很大程度上或完全基于文件的扩展名. 这篇文章介绍了Java中 ...

  2. 张赐荣: 详解 Java 中的包装类型

    在Java中,包装类型是用于将基本数据类型(int.float.boolean等)转换为对象的类.这些类被称为包装类,它们的名字都是在基本数据类型前面加上"Integer".&qu ...

  3. Java中的原始类型与原始封装类型

    在写Java代码的过程中,一直对Java提供的一些类参数又疑问,今天查了一下,进行了解学习. type argument cannot be of primitive type 问题: Java中什么 ...

  4. java中的Reference类型

    本文简要总结java中的Reference类型. 最近在研读jdk并发框架,其中AQS是重点,由于我打破砂锅问到底的轻微强迫症,google了AQS作者Doug Lea的论文原文[The java.u ...

  5. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  6. byte java byte_详解java中的byte类型

    Java中整数类型有:byte占8位, short 占16位, int占32位, long占64位 Java也提供了一个byte数据类型,并且是基本类型中的整数类型.java byte是作为最小的数字 ...

  7. Java中关于String类型的10个问题

    转载自   Java中关于String类型的10个问题 1. 如何比较两个字符串?用"="还是equals 简单来说,"=="是用来检测俩引用是不是指向内存中的 ...

  8. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

    <Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...

  9. java中Date日期类型的大小比较

    java中Date日期类型的大小比较 方法一: java.util.Date类实现了Comparable接口,可以直接调用Date的compareTo()方法来比较大小 String beginTim ...

最新文章

  1. #Apache Spark系列技术直播# 第六讲【 What's New in Apache Spark 2.4? 】
  2. SSH secure shell 权威指南(转载)
  3. python【数据结构与算法】战争之城(分支限界法)
  4. Windows Azure Cloud Service (23) 使用Full IIS模式部署多站点和虚拟目录
  5. Spring Session实战
  6. TagHelper是怎么实现的
  7. 记事本开发者日记~二
  8. 2008服务器修改ipv4,Windows 2008/2012/2016如何添加配置多IP
  9. 清华大学操作系统OS学习(十四)——文件系统和文件描述符
  10. js判断是否为手机端访问
  11. 数学建模学习笔记(三十一)模糊评价法
  12. flash 中.Swf 格式的文字 转化为 word 或pdf 或 xps
  13. scMRA:一种健壮的深度学习方法,可以用多个参考数据集注释scRNA-seq数据
  14. 新的开始 LibreOJ - 10066(最小生成树模板)
  15. 被食者与食者系统matlab,捕食者与被捕食者模型——Logistic-Volterra
  16. 阿里云 linux nginx 环境配置 该网页无法正常运作
  17. MacBook上下载安装Mysql
  18. 小米电视是鸿蒙系统吗,搭载鸿蒙系统!华为正式发布荣耀智慧屏 小米电视迅速升级取消开机广告...
  19. unity 2D游戏开发 制作帧动画的两种方法
  20. ffmpeg常用库、术语、API、数据结构总结

热门文章

  1. TypeError: ‘BasePermissionMetaclass‘ object is not iterable
  2. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1079:计算分数加减表达式的值
  3. Netty实战 IM即时通讯系统(二)Netty简介
  4. 【C++】C/C++系列教程汇总(更新中......)
  5. 【Tiny4412】烧写最小文件系统到SD卡
  6. 【Linux】一步一步学Linux——apt-get命令(278)
  7. 【Linux】一步一步学Linux——crontab命令(132)
  8. Codeforces 930 A. Peculiar apple-tree (dfs)
  9. mybatis里的log适配器模式
  10. iOS Hacker Xcode玩转arm64汇编基础