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)
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就报异常了 怎么办呢?的主要内容,如果未能解决你的问题,请参考以下文章