java判断字符串相等 用s.equals(s1)。但是可能有空值的情况,用equals就报异常了 怎么办呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java判断字符串相等 用s.equals(s1)。但是可能有空值的情况,用equals就报异常了 怎么办呢?相关的知识,希望对你有一定的参考价值。

RT 我要同时比对3组数据 只要有一组不相等就输出信息
if(!a.equals(b)||!c.equals(d)||!e.equals(f))
//如果4个字段中某一项不等,那么输出
System.out.println("不相等");

abcdef都从数据库中获取 所以可能出现null值 那么怎么进行对比呢?

    s.equals(s1),s必须非null,否则会空指针异常;

    s1可以为null,在确保s1不为空时,可以用s1.equals(s)来判断;

    无法确定s或s1不为null时,解决办法:

    s != null && s.equals(s1)

参考技术A 前提是你的参数 a、b、c、d、f可能存在同时为空的情况

if(a==null || !a.equals(b) || c==null || !c.equals(d) || e==null || !e.equals(f))
//如果4个字段中某一项不等,那么输出
System.out.println("不相等");


原则:X.equals()判断相等时,先对X变量做个null判断,避免空值异常

有关控制判断请参考
http://zhidao.baidu.com/question/1690040129116295428.html?oldq=1追问

(!a.equals(b)||!c.equals(d)||!e.equals(f)) 我怎么觉得我这个! 他的连接会有问题吧? 系统会认为是a.equals(b)的非吗?尤其是有||的时候

追答

是我弄错了

 if( (a!=null && a.equals(b))  &&   ( c!=null  &&  c.equals(d)) &&  ( e!=null  && !e.equals(f))) 

    // 都相等

把你想要的结果告诉我

有3组数据:(a、b)、(c、d)、(e、f)

只要其中一组不相等,就提示

其中上面6个变量都存在null的情况,还是不存在null的情况?

 

优化了下代码,将比较方法提取出来,如下:

 public boolean compare(String v1, String v2) 
  // v1不为空时:返回v1.equals(v2)
  // v1为空时:A:v2不为空:返回v2.equals(v1)
  //           B: 表示v1、v2都为null时,返回true
  return v1 != null ? v1.equals(v2) : (v1 != null ? v2.equals(v1) : true);
 

原来的判断改为:

if (!compare(a, b) || !compare(c, d) || !compare(e, f)) 
   // 有一个不相等
  

参考技术B 在s.equals(s1)这个判断语句之前加上s!=null&&
总体大概是这样的if(s!=null&&s.equals(s1))...
参考技术C 你可以把if条件这么写
if(a==null || b==null || c==null || d==null || e==null || f==null || !a.equals(b)||!c.equals(d)||!e.equals(f))
System.out.println("不相等");


希望能对你有帮助,望采纳O(∩_∩)O~
参考技术D 把每个字段都处理一下,如果为null,处理成空字符串。

java基础面向对象编程

1.String对象的声明和操作

字符串无处不在,使用String来构造,并存储字符串,

例:

常用:String  str  = “abc”;

不常用:String  str = new String(“abc”);

PS:

String  s= "abc";

String s1 = "abc";

s==s1=true;(==号判断地址是否一致,equals判断内容是否一致);

s.equals(s1)=true;

使用new关键字创建字符串,就会在字符串池中创建2个地址,内容一样,两者地址不同,

String s=new String ("abc");

String s1= new String ("abc");

s==s1=false;(==号判断地址是否一致,equals判断内容是否一致);

s.equals(s1)=true;

String对象是不可变的,

类中每一个看来会修改String值的方法,其实都是创建了新的String对象(包含修改后的字符串内容),

String的只读性带来效率优化可能

字符串字面值存储于字符串池中,String对象优先指向该字符串池,避免反复生成重复的字符串实例,

系统对String 的非修改处理效率很高,远远超过另外两个字符串类StringBuffer和StringBuilder

2.String对象的常用方法

--length()--返回此字符串的长度

--charAt(int  index)--返回指定索引处的char值。

--concat(String str)  --将指定字符串连接到此字符串的结尾

--contains(CharSequence s)--是否包含指定的字符串序列

--equals(Object anObject ) --将此字符串与指定的对象比较

--compareTo(String anotherString ) --按字典顺序比较两个字符串

--indextOf(int ch)  --返回指定字符在此字符串中第一次出现的索引

--split(String regex)  -- 根据匹配给定的正则表达式来拆分此字符串

--substring(int beginIndex) --截取字符串

--toLower/upperCase() -- 将指定字符串进行大小写转换

等等...

3.面向对象的优点

3.1便于程序模拟现实世界中的实体

用“类”封装建模实体对象的状态和行为

3.2隐藏细节

对象的行为和状态被封装在类中,外界通过公共的接口--来调用类的方法来获得状态信息,不需要关注内部细节如何实现,

3.3可重用

通过类模版,可创建多个对象事例,重用类的定义代码

4.java对象的内存管理机制

使用new创建对象,在堆内存分配对象空间、初始化

在方法栈中定义局部变量,持有对堆内存中对象的引用

方法执行完返回,栈内存自动释放,局部变量销毁

如果堆内存中对象没有变量引用它,成为垃圾,由垃圾回收器回收,释放所占堆内存!

 

以上是关于java判断字符串相等 用s.equals(s1)。但是可能有空值的情况,用equals就报异常了 怎么办呢?的主要内容,如果未能解决你的问题,请参考以下文章

Java语法

java判断字符串,为啥用"=="做不了判断

字符串

java基础面向对象编程

String常用的

廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码