对于每一个Java程序员来说,null肯定是一个让人头痛的东西,连Java的发明者都承认这是一项巨大的设计失误,今天就来总结一下Java中关于null的知识.

1.null不属于任何类型,可以被转换成任何类型,但是用instanceof永远返回false.
2.null永远不能和八大基本数据类型进行赋值运算等,否则不是编译出错,就是运行出错.
3.null可以和字符串进行运算.
4.同种类型的null,比较都返回true,null==null也返回true.

持续更新中......

下面将用十个例子来验证上面的四点
Integer a1 = null;
Integer a2 = null;
System.out.println(a1.equals(a2))--空指针异常

首先来看看下面的一道面试题:

public class Null{
public static void nihao(){
  System.out.println("你好陌生人");
}
public static void main(String[] args){
  ((Null)null).nihao();
}
}
A、你好陌生人
B、编译不通过
C、编译通过,执行报错
D、内存溢出

答案是A

1.null是Java中的关键字,它不属于任何类型,只是一种特殊的值,也可以说说代表一个不确定的对象.
2.null是所有引用类型的默认值.
3.null可以被转化为任何类型,输出null不会抛出任何异常,这和println()的源代码有关.
4.null可以被转化为任何类型,所以可以调用静态方法.

5.null可以被转化为任何类型,但是不能调用非静态方法,运行时会出错.
6.null被强转化任何类型后,它还仅仅是一个特殊值,并不属于任何类型.
7.null==null返回true,被转换为同种类型的null,都返回true,不同类型直接编译报错.(如果是一个封装类型+一个基本类型还是运行成功的-意思是:integer+double等)
8.用String转换后的null可以进行字符串运算,这是因为字符串进行连接的时候,编译器对null进行了特别的优化,其实就是例化StringBuilder,在调用append()方法时对null的一个特别处理,当为null时,转化为“null”,最后调用toString()返回一个String对象.
9.用八大基本类型转换后的null,不可以进行基本类型的运算,否则会出现编译或者运行错误.
10.null和“”并不相等,因为下面的s并没有指向某一块内存,而s1指向了一块空字符串的内存.

java-null简介的更多相关文章

  1. java NIO简介

    1)java nio简介 nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api . Sun 官方标榜的特性如有:为所有的原始类型提供 (Buffer) 缓存支持:字符集编码 ...

  2. 夯实Java基础系列15:Java注解简介和最佳实践

    Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...

  3. Java反射简介

    Java反射简介 1.Class类 1) 在面向对象的世界里,万事万物皆对象.(java语言中,静态的成员.普通数据类型除外) 类是不是对象呢?类是(哪个类的对象呢?)谁的对象呢? 类是对象,类是ja ...

  4. java agent简介

    java agent简介 主要就是两种,一种的方法是premain,一种是agentmain.这两种的区别是: premain是在jvm启动的时候类加载到虚拟机之前执行的 agentmain是可以在j ...

  5. Java SE 简介 & 环境变量的配置

    Java SE 简介 & 环境变量的配置 一.Java 技术的三个方向 Java 技术分为三个方向 javaSE( Java Platform Standard Edition 标准版)用来开 ...

  6. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...

  7. 一、Android NDK编程预备之Java jni简介

    转自:  http://www.eoeandroid.com/thread-264384-1-1.html 游戏开发 视频教程 博客 淘帖     论坛›eoe·Android应用开发区›Androi ...

  8. Java RMI 简介及其优劣势总结

    今天,帮别人看UDAS配置问题时,看到采用的是RMI方式的调用,如:rmi://10.20.134.140:2299/DataServer,而且这个端口是被直接硬编码在UDAS的代码中的.既然看到了, ...

  9. Java多线程简介

    Java多线程简介 Java中内置了对多线程的支持,让多线程的开发方便很多,但同时也带来了另外的复杂,线程间的交互以及很多的不确定性让多线程又显得很复杂.在此只是针对Java中多线程的基础做些说明,有 ...

  10. Java异常简介、异常捕获还是上抛总结

    概要 本章对Java中的异常进行介绍.内容包括:1.Java异常简介2.Java异常框架 一.Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序 ...

随机推荐

  1. jQuery开发工具

    开发工具:MyEclipse2014 + aptana插件 下载apada 放到MyEclipse的路径   https://segmentfault.com/a/1190000005711923   ...

  2. 166. Fraction to Recurring Decimal (Math)

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  3. MFC里面解析json文件格式

    CString strTemp; //CString ->string; string stringMsg = (LPCSTR)(CStringA)strTemp; //string -> ...

  4. boost学习 内嵌类型检测 与 any 的代码练习

    本文是学习 boost源码的一些练习 参考文章来自 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba) 目录 http://blog.csdn.net/pongba/ar ...

  5. 【APP测试(Android)】--安装卸载

  6. 《C#从现象到本质》读书笔记(三)第3章C#类型基础(下)

    <C#从现象到本质>读书笔记第3章C#类型基础(下) 常量以关键字const修饰.C#支持静态字段(类型字段)和实例字段. 无参属性的get方法不支持参数,而有参属性的get方法支持传入一 ...

  7. rsync简介与rsync+inotify配置实时同步数据

    rsync简介 rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. rsync特性 rsync ...

  8. MUI 里js动态添加数字输入框后,增加、减少按钮无效

    numbox 的自动初化是在 mui.ready 时完成的mui 页面默认会自动初始化页面中的所有数字输入框,动态构造的 DOM 需要进行手动初始化.比如:您动态创建了一个 ID 为 abc 的数字输 ...

  9. Web API使用HttpResponseMessage与HttpResponseException的差异 HttpResponseMessage 返回类型

    在 Web API 中提供了 HttpResponseMessage 与 HttpResponseException 用于处理返回讯息,HttpResponseMessage 用于返回一个来自于客户端 ...

  10. JDK、JRE、JVM之间的关系

       JDK.JRE.JVM之间的关系 1.JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...