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

笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终于看出了究竟

源头就是出在了对String为null的调用上,这时会抛出NullPointerException

首先,笔者在前面的博客中提到了对字符串进行比较的方法。传送门,通过先阅读这篇文章,可能对以后的理解更有帮助。


下面介绍几个比较常见的错误写法

if(str == "")
{
//
}

因为==操作在对String这种引用数据类型来说,比较的是地址,两者的地址不同,所以这种写法的if语句永远不会被执行。

if(str.equal(""))
{
//
}

这种写法也有可能出错,如果当str=null时,对它进行调用就会抛出NullPointerException异常。

所以正确的写法如下:

if(str!=null&&str.equal("something")
{
//
} 或者 if(!"something".equal(str))
{
//这种写法,如果你没有给str赋初值,编辑器会提示你
//如果str==null,那么这个if会被执行
}

这两种写法亲测实用,并且更安全。


说完了一些例子,下面让我来说一下他们的真正的区别吧

String str1 = null;		//str1引用为空,它没有地址,它是一个没有被实例化的对象

String str2 = "";		//str引用为空字符串,它有地址,它是被实例化的对象,值为空而已。

总结来说

所以说对str1进行比较时要用==操作,如果使用str1.equal()则会抛出NullPointerException

对str2进行比较时要用str2.equal(),如果使用str2=="你想要比较的字符串",这个boolean值永为false

update by 2017/3/30 19:42

by 一枝猪

JAVA中String = null 与 String = "" 的区别的更多相关文章

  1. java中的switch用String作为条件

    在开发java程序的过程中,我们遇到了条件推断首选就是switch,可是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解    1.enum是一 ...

  2. java中main方法的 (String []args)

    java中main方法的 (String []args)         String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数.java 本身不存在不带String ...

  3. java中int转成String位数不足前面补零

    java中int转成String位数不足前面补零 转载自:http://ych0108.iteye.com/blog/2174134 java中int转String位数不够前面补零 String.fo ...

  4. Java中toString()与new String()

    Java中toString()与new String(): 1.错误演示: FileInputStream fileIn = new FileInputStream(filePath);byte[] ...

  5. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  6. java中的this与super的区别

    java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...

  7. Java中instanceof和isInstance的具体区别

    Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...

  8. Java中有关Null的9件事

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

  9. java中的sleep()和wait()的区别

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...

随机推荐

  1. gitlab 实现自动部署(简单Python实现)

    功能说明: 当本地master分支执行push动作的时候,服务器端会自动执行master分支的pull操作(还可以执行一些自动化脚本) 原理: git hooks就是那些在git执行特定事件(如com ...

  2. Hbase集群监控

    Hbase集群监控 Hbase Jmx监控 监控每个regionServer的总请求数,readRequestsCount,writeRequestCount,region分裂,region合并,St ...

  3. python细碎语法点

    在系统入门python有的是没有遇到,有的是学过了缺乏使用没有记住,就开篇随笔记录这些基础的语法点,随时更新. with...as... 也就是说with是一个控制流语句,跟if/for/while/ ...

  4. LR的响应时间与使用IE所感受时间不一致的讨论

    在做性能测试时,有时碰到这样一种情况,使用性能工具LR测试出来的响应时间比实际使用IE感受到的时间要长,例如,实际使用IE打开一个系统时只需要1~2秒,而使用LR跑一个用户所得出的结果可能是8秒.10 ...

  5. DB2 执行SQL脚本

    今天有网友问到这个问题,平时也没怎么留意.刚刚做了测试在db2的SQL脚本中,直接写命令就好了. 例如: [db2inst1@win backups]$ cat test.ddl ---------- ...

  6. Vim命令快捷键(网摘)

    Vim命令快捷键(网摘) 原文出处:[?---->home]

  7. css基础知识之属性选择器

    css属性选择器及属性和值选择器如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  8. node.js之事件机制

    EventEmitter类 方法名与参数 描述 参数说明 addListener(event,listener) 对指定的事件绑定事件处理函数 参数一是事件名称,参数二是事件处理函数 on(event ...

  9. Java温故而知新-杨辉三角形

    Java温故而知新-杨辉三角形 一. 先说需求 需求 打印输出杨辉三角形,行数可变,支持50行内的任意数. 预期结果如图所示 1 这是第几行呢,是第1 1 1 这是第几行呢,是第2 1 2 1 这是第 ...

  10. poj 3013 Big Christmas Tree

    Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 20974   Accepted: 4 ...