java equals()用法错误解析

if (!password2.equals(password1)|| "".equals(password1) || password1.equals(null))一句的错误解析:

首先,正确的写法是if (null.equals(password1) || "".equals(password1) || !password1.equals(password2))。

然后来解析错误的写法:

主要的错误在password1.equals(null)这一句,这一句错的原因是,password1放在外面,如果它是null,那么就会报空指针异常。而且它应该第一个检查,因为如果password1为null,那么后面的就都不用检查了。

!password2.equals(password1)同上,password2同样可能发生空指针问题,所以要将password1放外面,因为前面已经检测过了,所以如果执行这句,password1肯定不会为null。

另外,也可以写成如下形式:if (StringUtils.isEmpty(password1) || !password1.equals(password2)),StringUtils.isEmpty(password1)就等同于null.equals(password1) || "".equals(password1),只是做了封装而已。

附一句别人对StringUtils的说明:(转)StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码)。

2、关于str.equal(“abc”)和”abc”.equal(str)
这个好像争论也挺多的,第一种常量写在后面可能符合大多数人的习惯,也符合我们的逻辑思维。但是需要多一个str是否为null的判断。否则这里是有可能出现异常的。而后一种写法不需要多做关于是否为null这个判断。就我个人喜好来说,比较喜欢后一种写法。

3、关于String的null

/**
* 测试java的String为null 的情况
* create date:2009-6-3
* author:Administrator
*
*/
public static void testNull(){
String a= null,b = null,c="呵呵";
System.out.println(a == null);
System.out.println(a+b+c);
}
方法运行结果:
true
nullnull呵呵
所以大家要注意了做字符串合并操作时,别忘记判断null,否则结果会不太让你爽啊!

时间: 2024-08-01 02:16:12

java equals()用法错误解析的相关文章

麦子学院Android开发Java教程ClassCastException 错误解析

现在Java编程中经常碰到ClassCastException 错误,ClassCastException 是 JVM 在检测到两个类型间的转换不兼容时引发的运行时异常.此类错误通常会终止用户请求.本模式试图为您提供了解和排除 ClassCastException 错误最常见成因的一些基本要素. 为什么发生此问题? 在执行几乎任何子系统(web 容器.EJB.JCA.群集等)的应用程序代码或 WebLogic Server 代码内均可能发生 ClassCastException.通过转换,可以指

最全面的Java多线程用法解析

最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透彻地理解Java多线程的原理以及使用方法. 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread构造函数: public Thread( ); public Thread(Runnab

Java equals和toString用法

1.代码 User.java public class User{ String name; int age; public User(String name,int age){ this.name = name; this.age = age; } public boolean equals(Object obj){ if(this == obj) return true; boolean b = obj instanceof User; if(b){ User u = (User)obj;

【转】Java HashMap 源码解析(好文章)

- .fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wrapper iframe, .fluid-width-video-wrapper object, .fluid-width-video-wrapper embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } [

转:在java中使用dom4j解析xml

在java中使用dom4j解析xml 虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: <?xml version="1.0" encod

AFNetworking 使用总结 (用法+JSON解析)

« AFNetworking 图片的本地缓存问题 Get application bundle seed ID in iOS » AFNetworking 使用总结 (用法+JSON解析) From:http://www.coneboy.com/?p=716 这几天在评论页面的时候发现get请求后加入2个以上的汉字会出现BadURL提示,断点调试发现是多中文字符惹的祸,所以在URL使用以前先转码成UTF-8即可这里顺便说明下自己使用AFNetworking 的常用方法. 目前我只是用到#impo

Java 内存泄漏--全解析和处理办法 [ 转载 ]

Java内存泄露——全解析和处理办法 [转载] @author 小筐子 @address http://www.jianshu.com/p/bf159a9c391a 本文章会一步一步的探讨内存泄露的问题.博主第一次书写长篇技术贴,如有错误或不周到的地方请多指教. JAVA是垃圾回收语言的一种,开发者无需特意管理内存分配.但是JAVA中还是存在着许多内存泄露的可能性,如果不好好处理内存泄露,会导致APP内存单元无法释放被浪费掉,最终导致内存全部占据堆栈(heap)挤爆进而程序崩溃. 内存泄露 说到

java abstract与interface解析

java abstract与interface解析 abstract 定义 在面向对象的概念中,所有的对象都是通过类来描述.但是,反过来,不是所有的类都是用来描述对象的(把类具体化).如果一个类没有包含足够的信息来描述一个具体的对象,那么这个类就是抽象类. 比如,我们进行一个图形编辑软件的开发,就会发现问题域中存在圆,三角形这样一些具体的概念,它们是不同的,但是它们又都属于形状这样一个概念.形状这个概念在问题域中是不存在的,它就是一个抽象的概念.正是因为抽象的概念在问题领域没有对应的具体概念,所

Java IO流详尽解析(转自 http://www.2cto.com/kf/201312/262036.html)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别