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 一枝猪
JAVA中String = null 与 String = "" 的区别的更多相关文章
- java中的switch用String作为条件
在开发java程序的过程中,我们遇到了条件推断首选就是switch,可是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解 1.enum是一 ...
- java中main方法的 (String []args)
java中main方法的 (String []args) String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数.java 本身不存在不带String ...
- java中int转成String位数不足前面补零
java中int转成String位数不足前面补零 转载自:http://ych0108.iteye.com/blog/2174134 java中int转String位数不够前面补零 String.fo ...
- Java中toString()与new String()
Java中toString()与new String(): 1.错误演示: FileInputStream fileIn = new FileInputStream(filePath);byte[] ...
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...
- java中的this与super的区别
java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...
- Java中instanceof和isInstance的具体区别
Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...
- Java中有关Null的9件事
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...
- java中的sleep()和wait()的区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...
随机推荐
- python实战===实现读取txt每一行的操作,账号密码
最近搞到了一批163邮箱的账号和密码,但是里面有部分账号不能用,密码是错的. 以此为背景 人工手动挨个登录检查效率太低! 于是写了下面这个脚本: import linecache import smt ...
- Code:Blocks中文输出乱码解决方法
0x01 问题描述 将CB的编码格式设置为UTF-8之后,在CMD窗口输出中文乱码. 0x02 解决办法 控制台显示的时候缺省的是使用系统默认的字符集,比如windows下用的是GBk,但是默认情况下 ...
- ThinkSNS积分商城系统功能详解!
积分商城含PC端.Android APP.iOS APP:在ThinkSNS PC端首页导航栏点击"拓展功能",然后选择"积分商城"进行体验:APP端则是在&q ...
- js的call,apply,bind的使用与区别
在原生js中会有三个很常见的函数,call,apply,bind 他们的作用就是改变当前函数的this指针, 但是细微来说他们还是有不同的. 1)call,apply都是执行某一函数,发现this有变 ...
- Pycharm快捷键的使用
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完成Ctrl + ...
- VC++动态链接库(DLL)编程深入浅出
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...
- github的基本使用
1. 在github官网注册账号 https://github.com/ 2. 下载git for window https://git-for-windows.github.io/ 3. gi ...
- iOS蓝牙BLE开发
蓝牙是一个标准的无线通讯协议,具有设备成本低.传输距离近和功耗低等特点,被广泛的应用在多种场合.蓝牙一般分为传统蓝牙和BLE两种模式:传统蓝牙可以传输音频等较大数据量,距离近.功耗相对大:而BLE则用 ...
- APP测试容易忽略的地方
我们手机APP测试,主要针对的是android和ios两大主流操作系统,总体上来说android手机型号.版本多,bug也多:ios相对bug少.下面就针对Android说一下最容易忽略的测试点吧. ...
- 原创:Docker在云家政的应用 谢绝复制粘贴内容
我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享.. 首先我介绍一下公司的背景,公司属于中小型创业公司,服务 ...