1.在这之前必须弄清的知识
java中==与equeals的区别
==:
==是比较两个变量的值,如果是基本数据类型,那么就是比较的基本数据的大小值
情况一:
int a=1;
int b=1;
System.out.println(a==b);
以上图中:==比较的就是上面两个内存块中的值,都是1,所以是true
但是如果存储的是引用类型,其实比较的还是变量本身所存储的值,我们都知道,
变量存储引用类型其实存储的只是引用对象的地址作为值存储到变量中,那么当用==
判断时,比较的就是这两个地址值了,所以说==比的是两个变量所存储的值,
至于这个值是什么类型的,就看放什么了
情况二:
User a = new User();
User b = new User();
System.out.println(a==b);
在上图中,a和b存的就是一个引用对象,在这时判断a==b时,比较的也是a和b所存储的值,
可以看出,a里面存的是0x1234,b里面存放的是0x5874,很明显不相等,所以是false
情况三:
而当使用==比较字符串时:
String a="abcd";
String b="abcd";
System.out.println(a==b);
这时,a和b存储的是同一个常量字符串,地址也一样,所以是true。
情况四:
String a=new String("abcd");
String b=new String("abcd");
System.out.printlnl(a==b);
equals:
equals是属于Object的方法,在默认实现下其实就是==,也就是说和==是一样的,下图是Object中的默认实现
但是该方法可以被重写,至于被重写后比较的是什么就看实现的逻辑了,在这之中String就是对
equals重写了,String重写的逻辑就是比较字符串内容。
2.在开发中对象判断是否为空
需要判空的情况:
1.界面采集到的重要数据,尤其是update的条件数据
2.service返回的数据;
3.在对象执行相关方法的时候在为确定对象不为空的情况下都需要判空,如domain.tomap() ,list.size(),obj.equals()等;
因此可以考虑将判断封装成一个工具类
public class ValidateUtil { public ValidateUtil() { } public static boolean isEmpty(Object value) { if (value == null) { return true; } else if (value instanceof String) { return ((String)value).isEmpty(); } else if (value instanceof Collection) { return ((Collection)value).isEmpty(); } else if (value instanceof Map) { return ((Map)value).isEmpty(); } else if (value instanceof String[]) { return ((String[])((String[])value)).length == 0; } else { return false; } } public static boolean isEmpty(String s) { return s == null || s.isEmpty(); } public static boolean isEmpty(Collection<?> c) { return c == null || c.isEmpty(); } public static boolean isNotEmpty(String s) { return s != null && s.length() > 0; } public static boolean isNotEmpty(Collection<?> c) { return c != null && !c.isEmpty(); } public static boolean isString(Object obj) { return obj instanceof String; } }