【第22期】观点:IT 行业加班,到底有没有价值?

""与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...

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

1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。  2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针。 3.所谓的空指针异常,...

Java中equals方法造成空指针异常的原因及解决方案

前言 博主最近在做一个项目的调试工作,期间遇到了一个会导致抛出空指针异常的小问题,说它是小问题,是因为真的只是在写代码的时候注意一下就好了,但是这里还要写一个博客,就是为了剖析这个问题,然后给自己做...

空指针、NULL指针、零指针

1. 空指针、NULL指针、零指针 1.1什么是空指针常量 0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)...

【Java】对于空值null的判断

在大型程序开放过程中,无论是SSH还是安卓,都需要对空值进行判断,尤其是某个实体传递过来的值,但是,往往对于null的判断条件没写好,导致空指针异常。 对于任意的Object,判断其是否为null,...

NullPointerException空指针异常

1:NullPointerException由RuntimeException派生出来,是一个运行级别的异常。意思是说可能会在运行的时候才会被抛出,而且需要看这样的运行级别异常是否会导致你的业务逻辑中...

空指针(NULL)那些事?

我们常常被告知,使用指针前需要判断是否为NULL;如果是NULL而你去使用它就会出问题。真相果真是这样吗?关于程序设计基石与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea

null和“”调用方法都会报空指针吗

今天和同事谈论关于空指针的简单问题,条件是一个EditText获取输入的值,当没有输入值的时候,editText.getText();返回的是什么? 打印出来后,才发现并不是Editable对象,而...

测试不等于NULL的错误指针

AfxIsValidAddress  Visual Studio 2005 Other Versions 1 out of 2 rated this helpful - Rat...

指针赋值为NULL;是什么意思呢?

 int *p=NULL;这个NULL是什么意思?     网上百度了下,有人说NULL=0;是在头文件中定义的;     首先要说的是:非堆分配的内存是不需要free的。     再说p...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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