Java中的null“类型”

null是一个非常非常特殊的类型,对于每一个测试人员都要十分小心null的存在的可能性。同时null也让很多RD头疼,甚至连Java的设计者都成人null是一个设计失误。这篇文章,测者想聊聊这个让很多人不喜欢的null。

null 到底是怎样的存在

在Java中有基本类型和引用类型,但是null却不属于上述两种,我们即不能声明一个变量为null类型,也不能将变量转换为null。null的引用是唯一一种null正确的表达方式。但是null却可以转换成任何一种引用类型。

public class MrTesterTestClass{

    Integer int1 = null;
    String str1 = null;
    Integer int2 = (Integer) null;
    String str2 = (String) null;

}

上面的代码在编译其中并不会报错。但是如果我们使用:

int int3 = null

那么就出出现问题。

null的一些细节注意点

null的装箱拆箱的细节

先说一个Java的概念:装箱和拆箱

Integer count =100;装箱

int sum =count;拆箱

上面的代码清洗的解释了装箱和拆箱的过程,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。

但是如果任何一个包装器类型在拆箱的时候都会包NPE异常(空指针异常)。

布尔运算

null很特别,但是可以而且仅可以做布尔运算。

null==null的结果是true,但是这里面特别注意:如果是两个null的引用变量那么首先要保证两个引入变量的类型完全一致。运算结果才会是true。

String类型转换

public static void main(String[] args){

    String str = null;

    str= str+"ss";

    System.out.println(str);
}

上面的代码的输出:nulss。String转换后的null可以进行字符串运算,这是因为字符串进行连接的时候,编译器对null进行了特别的优化。

null 不等于“”

null和“”不相等,这是因为“”会在内容中有一个

本文分享自微信公众号 - V社 北京社(SoftwareTesters)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏solate 杂货铺

php init()和__construct() 区别

__construct(): 是PHP内置的构造函数,实例化之前 PHP 解析引擎自动调用,做一些初始化的工作或者外部服务器检测的工作。在实例化对象之前需要做的...

19710
来自专栏Jerry的SAP技术分享

DOCX to PDF conversion is successfully done document builder

版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

8730
来自专栏Spark学习技巧

Thrift or gRPC ?Alluxio RPC框架的深度实践总结

作为Alluxio 2.0发布版本的一部分,我们将RPC框架从Apache Thrift(见文末链接1)变为gRPC(见文末链接2)。在本文中,我们将讨论这一变...

35120
来自专栏灯塔大数据

技术分享 | 基于Intel Analytics Zoo的人脸识别应用与实践(下)

本Demo示例中视频源使用的是一路本地视频文件,在实际中也可以对接多路视频服务器,基于Analytics Zoo集群并行处理。

21210
来自专栏solate 杂货铺

etcd v2文档(3) -- 库和工具

14930
来自专栏solate 杂货铺

go url 参数编码和解码

当需要将参数解码成url.Values{}类型,也就是 map[string][]string,使用

33020
来自专栏编程坑太多

『互联网架构』dubbo 调用埋点(114)

如何才能完整的捕捉到以上信息呢?那么就需要了解Dubbo内部的调用 1.分解调用过程为多个步骤。2.这些步骤分别是在哪些协作线程上完成的?3.经过了哪...

14620
来自专栏FreeBuf

思科DCNM多个漏洞细节分析

Cisco Data Center Network Manager(DCNM)是由Cisco提供的虚拟设备、Windows和Red Hat Linux的安装包。...

11720
来自专栏Java编程技术

谈谈Golang并发编程

Go语言在设计时,Java和C ++是编写服务器程序最常用的语言(至少在Google是这样),这是因为使用这些语言可以高效的开发。但是Go设计者们觉得像Java...

13020
来自专栏Hadoop实操

SQL on Hadoop在快手大数据平台的实践与优化

SQL on Hadoop,顾名思义它是基于Hadoop生态的一个SQL引擎架构,我们其实常常听到Hive、SparkSQL、Presto、Impala架构,接...

28030

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励