重新求助,空指针及空字符串java如何判断空指针

解决request.getParament()空指针问题和字符的乱码问题,get和post
最新教程周点击榜
微信扫一扫java判断字符串String是否为空问题浅析
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了java判断字符串String是否为空问题,有需要的朋友可以参考一下
一、判断一个字符串str不为空的方法有:
1、str ==2、"".equals(str);3、str.length &= 0;4、str.isEmpty();注意:length是属性,一般集合类对象拥有的属性,取得集合的大小。&&&&&&&&&&& 例如:数组.length就是取得数组的长度。&&&&&&&&& length()是方法,一般字符串类对象有该方法,也是取得字符串长度。&&&&&&&&&&& 例如:字符串.length();说明:& 1、null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。& 2、""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。& 3.、null不是对象,""是对象,所以null没有分配空间,""分配了空间,例如:&&& String str1 = str引用为空 &&& String str2 = ""; str引用一个空串&&& str1还不是一个实例化的对象,而str2已经实例化。&&& 对象用equals比较,null用等号比较。&&& 如果str1=下面的写法错误: &&&&&& if(str1.equals("")||str1==null){ } && 正确的写法是 if(str1==null||str1.equals("")){ //所以在判断字符串是否为空时,先判断是不是对象,如果是,再判断是不是空字符串 }& 4. 所以,判断一个字符串是否为空,首先就要确保他不是null,然后再判断他的长度。&&&& String str =&&&& if(str != null && str.length() != 0) { }
二、以下是java 判断字符串是否为空的四种方法:
四种方法执行的效率分别如下:
JudgeString1耗时:625msJudgeString2耗时:125msJudgeString3耗时:234msJudgeString4耗时:109ms
代码如下:/**&* Created with IntelliJ IDEA.&* User: Administrator&* Date: 14-1-16&* Time: 上午10:43&* 判断字符串是否为空的效率问题&*/public class JudgeStringIsEmptyOrNot {&&& public static void main(String[] args) {&&&&&&& JudgeString1("w_basketboy", 10000);&&&&&&& JudgeString2("w_basketboy", 10000);&&&&&&& JudgeString3("w_basketboy", 10000);&&&&&&& JudgeString4("w_basketboy", 10000);&&& }
&&& /**&&&& * 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低;&&&& * 方法二: 比较字符串长度, 效率高, 是最好的一个方法;&&&& * 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二;&&&& * 方法四: 这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多;&&&& */&&& public static void JudgeString1(String str, long num) {&&&&&&& long startTiem = System.currentTimeMillis();&&&&&&& for (int i = 0; i & i++) {&&&&&&&&&&& for (int j = 0; j & j++) {&&&&&&&&&&&&&&& if (str == null || "".equals(str)) {
&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&&&&&& long endTime = System.currentTimeMillis();&&&&&&& System.out.println("function1耗时:" + (endTime - startTiem) + "ms");&&& }
&&& public static void JudgeString2(String str, long num) {&&&&&&& long startTiem = System.currentTimeMillis();&&&&&&& for (int i = 0; i & i++) {&&&&&&&&&&& for (int j = 0; j & j++) {&&&&&&&&&&&&&&& if (str == null || str.length() &= 0) {
&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&&&&&& long endTime = System.currentTimeMillis();&&&&&&& System.out.println("function4耗时:" + (endTime - startTiem) + "ms");&&& }
&&& public static void JudgeString3(String str, long num) {&&&&&&& long startTiem = System.currentTimeMillis();&&&&&&& for (int i = 0; i & i++) {&&&&&&&&&&& for (int j = 0; j & j++) {&&&&&&&&&&&&&&& if (str == null || str.isEmpty()) {
&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&&&&&& long endTime = System.currentTimeMillis();&&&&&&& System.out.println("function3耗时:" + (endTime - startTiem) + "ms");&&& }
&&& public static void JudgeString4(String str, long num) {&&&&&&& long startTiem = System.currentTimeMillis();&&&&&&& for (int i = 0; i & i++) {&&&&&&&&&&& for (int j = 0; j & j++) {&&&&&&&&&&&&&&& if (str == null || str == "") {
&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&&&&&& long endTime = System.currentTimeMillis();&&&&&&& System.out.println("function4耗时:" + (endTime - startTiem) + "ms");&&& }}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具java中判断空字符串时避免出现空指针的方法
java中判断空字符串时避免出现空指针的方法
遇到的一点问题,说不上大问题,就是有点烦人,如何判断字符串是否为空:
我们经常使用的方法,比如:
public boolean function (String params){
if (params == null || params.equals("")) {
上面可能是我们经常使用的方法,这个方法其实是存在弊端的:if语句里面使用的是或判断,就是说当params为null时,equals方法就不会被执行了,而如果把 || 换成 && ,这样手贱一下的后果就是,系统会报空指针异常。因为当params == null 后,再去判断equals语句,params怎么可能又是null ,又为空字符串呢。所以在这里大家要明确一下null 和“”(空字符串)的区别。
“”分配了内存 ;null没有。
调用null的字符串的方法会抛空指针异常。
“”是一个字符串(String).它在内存中是存在的。它可以使用Object对象中的方法(如”“.toString();”“.equals()) ,而null它是一个空对象.在内存中是不存在的.它不可以使用Object对象中的方法 。
String str1 = str引用为空
String str2 = “”; str应用一个空串
也就是null没有分配空间,”“分配了空间,因此str1还不是一个实例化的对象,而str2已经实例化。
注意因为null不是对象,”“是对象。所以比较的时候必须是 if(str1==null){….}和if(str2.equals(“”)){}
对象用equals比较,null用等号比较。因此,如果str1=下面的写法错误:
if(str1.equals(“”)||str1==null){
//如果str1没有值,则….
正确的写法是 if(str1==null||str1.equals(“”)){
//先判断是不是对象,如果是,再判断是不是空字符串
我的热门文章
即使是一小步也想与你分享下次自动登录
现在的位置:
& 综合 & 正文
java 空字符串与null区别
" "分配了内存 ;null没有 调用null的字符串的方法会抛空指针异常。 ""是一个字符串(String).它在内存中是存在的.它可以使用Object对象中的方法(如"".toString();"".equals()) 而null它是一个空对象.在内存中是不存在的.它不可以使用Object对象中的方法 ""占内存.. 在内存中会分配一个空间. null不占内存. 为空引用. String str1 = str引用为空 String str2 = ""; str应用一个空串 也就是null没有分配空间,""分配了空间,因此str1还不是一个实例化的对象,儿str2已经实例化。 注意因为null不是对象,""是对象。所以比较的时候必须是 if(str1==null){....}和if(str2.equals("")){} 对象用equals比较,null用等号比较。因此,如果str1=下面的写法错误: if(str1.equals("")||str1==null){//如果str1没有值,则.... //。。。。 } 正确的写法是 if(str1==null||str1.equals("")){ //先判断是不是对象,如果是,再判断是不是空字符串 //... }
&&&&推荐文章:
【上篇】【下篇】Java开发的一些小经验一(判断字符串是否为空) - 推酷
Java开发的一些小经验一(判断字符串是否为空)
&&&&&&& 在做Java开发的过程中,经常会有一些这样或那样的错误,这些错误在一些或深入浅出、或入门的书里面都有提到过,但是这就像是生活中的一些教训,说多少遍都是白扯,只有自己经历了,才会懂。
&&&&&&& 但是还是要写下来,一来作为自己的一个总结、反思,二来给不幸看到这篇小博客的同学们一点启发,哪怕在某天写代码的过程中有一瞬间想起来,并在自己的代码中使用这些小的技巧。虽然不能让程序一下子健壮起来,更不可能一下子让写代码的人高达上,但是至少会减少中午午睡的时候被叫醒去解决问题的次数。
文章十分的浅显,高手、大拿可以直接掠过。
&&&&&&& 今天就聊聊判断一个字符串是否为空
&&&&&&& 经常在程序里面需要判断某一个字符串是否是空的,尤其是用在判断方法的参数是否为空,比如:
* version 1
public boolean foo(String param){
//经常用这种方法来判断对象是不是空
if(param == null || param.equals(&&)){
//Some Code
//Do someting
&&&&&&& 如果一眼就看出上面代码的问题,说明你的代码已经敲了不少,有可能是吃过空指针的亏,有可能是聪明人一学就会这两种情况都不错,因为后面就不会再因为这样的代码而吃亏了。
&&&&&&& 下面就想想办法,看看怎么来优化一下。
&&&&&&& 由于foo这个方法中,if语句是用的或关系,这样的话,由于有个短路判断的存在,当param是null的时候,就不会再执行后面的equals方法了,这样的话可以在一定程度上掩盖这种写法的问题。
&&&&&&& 但是,当上面的或关系变成且的关系,会出现什么情况呢?回报空指针异常!
这是因为当判断了param==null后,再判断param.equal(&&),这时,由于param指向的是null,所以会抛出异常来。
&&&&&&& 那么把代码改下把,把foo方法变成下面这样:
* version 2
public boolean foo(String param){
//经常用这种方法来判断对象是不是空
if(param == null && &&.equals(param)){
//Some Code
//Do someting
&&&&&&& 这样的话,不论param是否为空,都不会出现异常了。
&&&&&&& 如果事情就这样结束了该多好,但是回头再看foo的第二版时,发现还是有点儿不大对头,万一哪天我把param==null这半句,少写一个等号,会出现什么呢?先赋值,然后再判断,抛出空指针,太幸运了,在开发阶段就能发现隐含的BUG。
&&&&&&& 但是假设把if语句变成下面的形式呢:
if(&&.equals(param) && param = null)
&&&&&&& 这时,条件判断是为真的,但是好不容易判断了个非空字符串,没相当又在自己的手里变成空的了!
&&&&&&& 那么继续优化一下foo吧
* version 3
public boolean foo(String param){
//经常用这种方法来判断对象是不是空
if(null == param && &&.equals(param)){
//Some Code
//Do someting
&&&&&&& 第三版的foo和第二版相比,只是把null和param换了下位置。再来分析一下发现,如果少打一个等号,编译都不会通过了!这就杜绝了我们在判断一个对象的时候无意间修改这个对象。
&&&&&&& 上面说的这些不只是限于Java有这种问题,在C、C++以及其他语言中都可能会有这样的问题,但是思路都是一样的,这有点类似于写作文,不论是小学生还是初中生,或者是高中生,以及各种作家,在写记叙文时,都免不了六要素:&人物、时间、地点、事件的起因、经过和结果。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 java如何判断空指针 的文章

 

随机推荐