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

目的:熟练掌握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. 深入理解 react-router 路由系统

    作者:范洪春链接:https://zhuanlan.zhihu.com/p/20381597来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在 web 应用开发中,路由 ...

  2. Codeforces Round #442 (Div. 2)

    A. Alex and broken contest time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  3. list容器的C++代码实现

    #include <iostream> using namespace std; template  <class T> class mylist;//前置声明 templat ...

  4. 将TinyXml快速入门的接口面向对象化(转载)

    作者:朱金灿 来源:http://www.cnblogs.com/clever101 在TinyXml快速入门的系列文章中(详情见本博客),我只是将tinyxml类库解析xml文件的类封装为API接口 ...

  5. 96、python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)

    在安装scrapy时遇到问题 环境:win10(64位), Python3.6(64位) 安装scrapy: 1.安装wheel(安装后,便支持通过wheel文件安装软件) pip3 install ...

  6. [国嵌攻略][077][Linux时间编程]

    时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是格林威治时间(Greenwich Mean Time, GMT). Calendar Time:日历时间, ...

  7. [国嵌笔记][026][ARM伪指令]

    ARM机器码 1.汇编程序通过汇编器变成机器码,然后才能在ARM处理器上运行 2.ARM机器码是一个32位的数,被分成了多个段,每个段都有各自的含义 3.格式: cond:表示条件(4位) I:表示源 ...

  8. Unity Instantiate各函数执行顺序

    GameObject go = Instantiate(aaa) ;        go.GetComponent<NewBehaviourScript>().Init(); Instan ...

  9. Spark算子--map和flatMap

    map和flatMap--Transformation类算子 代码示例 result  

  10. php switch case语句用法