自我总结,有什么不对或不到位的地方,请指出,感激不尽!

目的:熟练掌握java中null值出现的情况,避免NullPointerException

代码环境准备:需要引入junit;将代码package部分改成自己的package名。然后即可单元测试。

需要理解的概念:

包装类:例如:Integer,Long,Double,Boolean等,对应的基本类型为:int,long,double,boolean等

自动装箱:java提供的自动将基本类型的变量转换成包装类型的变量的功能。

自动拆箱:java提供的自动将包装类型的变量转换成基本类型的变量的功能。

上代码:JavaNull.java

package com.core.test;

import org.junit.Test;

public class JavaNull {
/*java version : 1.6 */ public static String name; //模拟装箱(该case仅是用来帮助理解自动装箱过程)
@Test
public void test001(){
int a = 10 ;
Integer A = Integer.valueOf(a);
put(A);
} //模拟拆箱(该case仅是用来帮助理解自动拆箱过程)
//若包装类型变量值为null,转换成基本类型的变量时,不会赋值成对应的初值,会报NullPointException
@Test
public void test002(){
Integer A = null;
int a = A.intValue(); //NullPointException
put(a);
} //String类型的对象判断非空并且非空字符串,则如case test003所示即可
@Test
public void test003(){
String name = null ;
if(null !=name && !name.isEmpty()){
put(null);
}
} //静态变量未初始化,但不会报空指针异常,因为虚拟机在加载该类的同时,会初始化静态变量值为null
@Test
public void test004(){
put(name);
} //当Integer对象的值超过127时,引用对象不再指向原来的内存地址,所以case test005打印结果为:"a == b",test006打印结果为:"a != b"
//当变量为引用类型时,"==" 判断变量是否指向同一内存地址,".equal()"判断变量的值是否相等
@Test
public void test005(){
Integer a = 100;
Integer b = 100;
if(a == b){
put("a == b");
}else{
put("a != b");
}
}
@Test
public void test006(){
Integer a = 128;
Integer b = 128;
if(a == b){
put("a == b");
}else{
put("a != b");
}
} //转换(null值是所有引用类型的默认值,可以强制转换为任一对象类型)
//猜想:java中存在一个潜在的Null类概念,是所有引用类型的变量的子类,test008打印结果为:"test--null",说明存在一个潜在Null.toString方法
@Test
public void test007(){
String a = (String)null;
Double b = (Double)null;
}
@Test
public void test008(){
String temp = null;
put("test--"+temp);
} //静态方法可以由类名直接调用,该case只是为了测试
//若对象test值为null,则用该对象调用静态方法时,不会报NullPointException,但调用非静态方法则会报NullPointException
@Test
public void test009(){
JavaNull test = null;
test.getStaticMethod();
test.getNotStaticMethod();//NullPointException
} //null值比较会返回true
@Test
public void test010(){
if(null == null ){
put("yes");
}else{
put("no");
}
} //case test011和test012为instanceof的用法
//instanceof说明:如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false
@Test
public void test011(){
// Integer num = null;
Integer num = new Integer(0);;
if(num instanceof Integer){
put("yes");
}else{
put("no");
}
} //instanceof可以匹配数组
@Test
public void test012(){
String str[] = {"abc","bcd"};
if(str instanceof String[]){
put("yes");
}else{
put("no");
}
} public static void getStaticMethod(){
put("StaticMethod");
} public void getNotStaticMethod(){
put("NotStaticMethod");
} public static void put(Object obj){
System.out.println(obj);
} }

以上是我的总结,参考文章:http://www.importnew.com/14229.html

              http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html

Java中的null值总结的更多相关文章

  1. java中,null值可以被强制转换为任何类型

    java中,null值可以被强制转换为任何类型

  2. Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...

  3. 转!!Java中关于Null的9个解释(Java Null详解)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  4. JAVA中String = null 与 String = "" 的区别

    JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...

  5. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  6. Java 中遇到null 和为空的情况,使用Optional来解决。

    Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...

  7. Java中的Null是什么?

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  8. Java中有关Null的9件事(转)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  9. JDK8 Java 中遇到null 和为空的情况,使用Optional来解决。

    空指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考[jdk 1.6 Java.lang.Null.P ...

随机推荐

  1. JavaSE(一)之类与对象

    终于到了要学习面向对象程序设计了,其中可能很多东西以前都知道怎么去用,但是却不知道怎么来的,或者怎么样写会出错,所以今天总结起来. 一.OOP概述 Java的编程语言是面向对象的,采用这种语言进行编程 ...

  2. c++(链表逆转)

    链表逆转是面试环境中经常遇到的一道题目,也是我们在实际开发中可能会遇到的开发需求.和线性逆转不一样,单向链表的节点需要一个一个进行处理.为了显示两者之间的区别,我们分别对线性内存和链表进行逆转: (1 ...

  3. Spark环境搭建(上)——基础环境搭建

    Spark摘说 Spark的环境搭建涉及三个部分,一是linux系统基础环境搭建,二是Hadoop集群安装,三是Spark集群安装.在这里,主要介绍Spark在Centos系统上的准备工作--linu ...

  4. spring的applicationContext.xml没有自动提示(使用本地的文档)

    http://www.springframework.org/schema/beans/spring-beans.xsd Window>>preference>>搜索xml(X ...

  5. Kubernetes存储之Persistent Volumes简介

    简介 管理存储和管理计算有着明显的不同.PersistentVolume子系统给用户和管理员提供了一套API,从而抽象出存储是如何提供和消耗的细节.在这里,我们介绍两种新的API资源:Persiste ...

  6. 利用脚本将EXCEl表倒入PowerDesigner中

    1.Excel表格样式 2.脚本代码 '****************************************************************************** O ...

  7. 浅谈localStorage、sessionStorage 与cookie

    由于工作的需要,今天使用了下localStorage.sessionStorage和cookie,感觉这玩意儿还挺好用的. 关于localStorage与sessionStorage的知识点以及用法之 ...

  8. 浅析const、let与var

    以前无论声明变量还是常量,总是使用var一勺端,知道接触了es6之后,发现原来变量.常量的声明其实是很讲究的. 这里简单来谈谈var.const与let. 1.var.var声明的变量没有块级作用域, ...

  9. seaJS 模块加载过程分析

    先看一个seajs的官方example,  以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...

  10. 关于jquery ajax跨域请求获取response headers问题

    背景:最近项目jwt用户认证方式,关于jwt本人就不再赘述,大家可自行百度. jwt token基本流程是这样的: 用户使用用户名密码来请求服务器 服务器进行验证用户的信息 服务器通过验证发送给用户一 ...