字符串判空的常见的判断方法!

编程入门 行业动态 更新时间:2024-10-25 04:22:43

<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串判空的常见的判断方法!"/>

字符串判空的常见的判断方法!

前言:

这篇文章主要从==和equals的区别然后延伸到开发中字符串判断是否是空(null)或空字符串("")的讲解。

正文:

一、java中操作符"=="的作用:

①在基本数据类型中byte,short,int,long,float,double,boolean,char,"=="的比较是值。

public static void main(String[] args) {int i=1;int j=1;System.out.println(i==j);
}

运行结果:true

②在引用数据类型中,"=="比较的是在堆内存中的地址值。

public static void main(String[] args) {Man man1 = new Man();Man man2 = new Man();System.out.println(man1==man2);}

运行结果:false

二、java中equals的作用

①在引用数据类型中比较的是堆内存中的地址值。

public static void main(String[] args) {Man man1 = new Man();Man man2 = new Man();System.out.println(man1.equals(man2));}

运行结果:false

不过一般在使用equals比较时,都会对equals进行重写,这样它比较的就不是对象在堆内存中的地址值啦。

三、String类中的==和equals的作用,这里会有点不一样

①==还是进行地址比较

public static void main(String[] args) {String s1 = new String("dada");String s2 = new String("dada");System.out.println(s1==s2);//falseString s3="dada";String s4="dada";System.out.println(s3==s4);//true
}

s1==s2还是false,这说明的确比较的是堆内存中的地址值,s3==s4是true他也是比的堆内存中的地址,只是字符串有个字符串池的概念,字符串池中"abc"只有一个abc,他们的地址一样,所以s3==s4的结果是true。

②由于字符串中的equals方法被重写啦,所以比较的是两个字符串的内容

public static void main(String[] args) {String s1 = new String("dada");String s2 = new String("dada");System.out.println(s1.equals(s2));
}

运行结果:true

四、如何判断字符串是否为空(null)或者是空字符串("")的方法

①在判断之前先要理解一个知识点:null和""的区别

null表示这个字符串没有任何指向,因为null没有分配空间,而""在堆中分配了空间。

②java判断字符串的四种方法

方法1:if(s==null || s.equals("")){逻辑...}  这种效率低

方法2:if(s==null || s.length()==0){逻辑...} 效率比方法一的效率高

方法3:if(s==null || s.isEmpty() ){逻辑...}效率和方法二差不多,但是Strng的isEmpty()方法是1.6以上才生效 

得到这样效率快慢结论的依据:

我们分别看下这三个方法的源码:

s.equals("")

public boolean equals(Object anObject) {if (this == anObject) {//比较地址return true;}if (anObject instanceof String) {//判断是否是字符串类型String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {//比较长度char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])//每个字符都得相同return false;i++;}return true;}}return false;}

s.length()==0

 public int length() {return value.length;}

s.isEmpty()

public boolean isEmpty() {return value.length == 0;}

我们可以看出来,方法二和方法一比较的方法,都是比较长度是否==0,所以理论上效率应该基本一致,而方法一在比较字符串的时候则明显要比方法二和方法三复杂,所以方法一理论上效率要慢些。

 

方法4:通过StringUtils判断是否为空(优先推荐使用org.apachemons.lang包下的StringUtils来判断,原因是:用StringUtils可以避免空指针问题)

例如 String dada=null;

然后在下面进行if(dada.equals("")),如果dada没有初始化,则会报空指针的错误,提示dada不能为空,但是我们在用stringutils时可以避免这个问题。

①StringUtils.isEmpty判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0

StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空处理

②StringUtils.isBlank判断某字符串是否为空,为空的标准是str==null 或 str.length()==0或由空白符(whitespace) 构成

StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true

-------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------

错误的判断方法:

if(s==null || s=="" ){逻辑...} ----------------但这种方法是不太正确的,因为操作运算符==实质还是比较堆内存中的地址,只不过String dada="";的这样的方式创建字符串,dada=="";的结果就是true,但是如果以下面的方式创建就是false.。

public static void main(String[] args) {
   String s=new String("");
    System.out.println(s=="");
}
所以在判断字符串的内容是否等于""时用equals

参考文章:

.html

总结:

我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有16位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里不明白或有不同观点的地方欢迎留言。

 

 

 

更多推荐

字符串判空的常见的判断方法!

本文发布于:2024-03-09 05:30:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1723989.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   常见   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!