""与null区别 空指针异常机理

原创 2015年11月21日 08:42:29

String s1;
String s2 = null;
String s3 = "";
String s4 = "abc";


二、空指针异常机理

1.什么叫空指针异常:

空指针的概念:也就是只有变量名(指针变量)这个容器,里面没有任何的内存地址,也就是里面是空的,就叫空指针。

注:a、在java里方法是需要对象去调用的,格式如:对象名.方法名;

       b、java里的对象就是堆内存中内存地址中的内容,如上图中的"abc"就是一个对象。

空指针异常:既然空指针只是一个空壳,里面没有内存地址,也就无法再堆内存中找到对象了,那必然不能使用方法了,把空指针使用方法这种行为就叫空指针异常。

 判断一个变量是不是空指针最根本在于是否有对象(堆内存中分配了空间)

看栈内存中的变量名(也就是容器)中是否有内容(内存地址):一般只定义一个变量名,没有给它赋值,就属于这种情况,如顶端代码中的String s1。(没有给它赋值,在堆内存中没有给它分配空间,就不能调用方法了,)

如果有内存地址,去堆内存里看是否有和这个内存地址相同的另一个内存地址,找不到也是空指针:如顶端代码中的String s2 = null;给s2赋值null了,栈内存的容器中有内存地址了,但这个内存地址在堆内存中找不到和它相对应的另一个内存地址,(因为在堆内存里压根就没给它分配空间)可以认为这个内存地址是无用的,只是一个形式而已。

s1与s2的区别在于:s1连内存地址都没有,除了赋值操作外其他全会报错,而s2还可以进行参数的传递,仅仅是不能调用方法,因为没有具体对象。

2.s.equals("")  和  "".equals(s)的区别
String s;
这里的s就是变量名,在栈内存中被创建,创建出来后并没有给它初始化,也就是在堆内存中没有给它分配空间来存储具体值,没有空间就是没有内存地址,那么在栈内存中的容器里也就没有内容,这是个空指针;
String s = null;
这里给s赋值了null,null的含义可以理解为无用的内存地址,这个内存地址在堆内存中找不到相同的内存地址,也就相当于走个过场,告诉你在栈内存中变量名这个容器里有个内存地址。这与上一个是有区别的,不过也可以理解为空指针,因为找不到值,在堆内存中没有分配空间。
String s = "abc";
这里给s赋值了"abc","abc"在堆内存中的容器中,在java里叫做对象,这个容器的内存地址放在s中。通过s可以找到这个值,所以这不是空指针。
String s = "";
这里的""也是对象,在堆内存中也分配了空间,这个对象有点特殊,因为它的长度为0,但并不是没有,这个要清楚。就比如小明去参加考试,但一题不会写最后得了0分;和小明压根就没去考试,没有成绩是两码事。

if(s.equals(""))   如果s是空指针,它就不能调用任何方法,这里调用了equals方法就会报错
if("".equals(s))   ""是一个对象,对象就可以调用方法了,所以这里就不会报错了。
版权声明:本文为博主原创文章,欢迎转载。

null与空串的区别,什么是空指针,如何解决空指针异常

null与空串的区别 1, null不占用空间,空字符串占用一定内存空间 2, null可以赋值给任何对象,而空字条串只能赋值给String 3, 调用null的方法会返回nullpoint...
  • lyclngs
  • lyclngs
  • 2016年07月06日 17:49
  • 2948

JavaCompiler:java.lang.NullPointerException报空指针异常——JDK与JRE开发时区别

将Java文件编译成class文件时用到JavaCompiler报空指针异常。 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler()...
  • superit401
  • superit401
  • 2017年11月13日 20:48
  • 301

HIVE空指针异常:hive NullPointerException null

hive NullPointerException null HIVE空指针异常 可能出现错误的2种原因: 1. 分区表未指定分区 2. Union all情况下,前后2段的字段名、数据类型不...
  • qq_31573519
  • qq_31573519
  • 2017年11月20日 23:30
  • 276

关于null的说明以及和0的区别

关于null的说明以及和0的区别 一个变量(例如,表上的各个列其实本质就是一个个变量)的值为null(即数据(值)为空),表示该变量没有被赋予任何数值。换句话说,当一个变量的值为null时,表示该...
  • haiross
  • haiross
  • 2015年01月14日 09:47
  • 2234

java.lang.NullPointerException 空指针异常问题

1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。  2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针。 3.所谓的空指针异常,...
  • qing101hua
  • qing101hua
  • 2015年05月03日 15:28
  • 56657

Java中""与null区别

java中空字符串("")与null的区别: 1、空字符串("")分配了内存。null没有分配内存。 2、""是一个空字符串(String),它在内存中是存在的,它可以使用Object对象中的方法...
  • ican87
  • ican87
  • 2014年05月14日 13:35
  • 961

什么情况下,空引用null调用方法不报空指针异常?

下面的代码,通过为null的引用调用静态方法,且并未产生异常。 public class Why { public static void test() { System.out.pri...
  • zilingkong
  • zilingkong
  • 2017年10月11日 11:27
  • 398

关于Graphics出现空指针异常的原因及repaint闪一下内容不见的分析

官方提供的原文是           public Graphics getGraphics() Creates a graphics context for this component. This...
  • weixin_37817685
  • weixin_37817685
  • 2017年03月30日 22:59
  • 473

空指针异常常见原因

空指针异常出现在对引用类型的操作上,当引用变量指向为空仍然去操作它的方法和属性时。 1、当在栈区声明了引用类型的变量,而未让该引用变量指向堆区的内存时(即只声明未初始化),再操作该引用变量则...
  • qq_27379053
  • qq_27379053
  • 2016年04月01日 10:54
  • 749

android ViewHolder 空指针异常

android ViewHolder 空指针异常 的时候,需要检测一下几个地方 1)首先确认  public View getView(int position, View convertView...
  • cw2004100021124
  • cw2004100021124
  • 2014年06月07日 17:33
  • 1654
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:""与null区别 空指针异常机理
举报原因:
原因补充:

(最多只允许输入30个字)