zoukankan      html  css  js  c++  java
  • JAVA中String = null 与 String = "" 的区别

    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 一枝猪

  • 相关阅读:
    [CSP-S模拟测试]:attack(支配树+LCA+bitset)
    [杂题]:C/c(二分答案)
    [杂题]:B/b(二分答案)
    二维莫队(离线)
    [CSP-S模拟测试]:联盟(搜索+树的直径)
    [CSP-S模拟测试]:蔬菜(二维莫队)
    [CSP-S模拟测试]:施工(DP+单调栈+前缀和)
    [CSP-S模拟测试]:画作(BFS+数学)
    [CSP-S模拟测试]:折射(DP)
    [CSP-S模拟测试]:养花(分块)
  • 原文地址:https://www.cnblogs.com/chunzhulovefeiyue/p/6648143.html
Copyright © 2011-2022 走看看