我所见文章来源:http://naniyo.iteye.com/blog/1930246
public class EqualDemo {
public static void equalByStringInFront(String str){
try{
if(str.equals("")){
System.out.println("字符串变量在前面的调用equal方法,返回true");
}
}catch(NullPointerException e){
e.printStackTrace();
}
}
public static void equalByConstantInFront(String str){
if("".equals(str)){
System.out.println("字符串常量在前面的调用equal方法,返回true");
}else{
System.out.println("字符串常量在前面的调用equal方法,返回false");
}
}
/**
* @param args
*/
public static void main(String[] args) {
String str = "";
String str2 = null;
EqualDemo.equalByStringInFront(str);
EqualDemo.equalByConstantInFront(str);
EqualDemo.equalByStringInFront(str2);
EqualDemo.equalByConstantInFront(str2);
}
}
运行以上代码,输出结果:
字符串变量在前面的调用equal方法,返回true 字符串常量在前面的调用equal方法,返回true java.lang.NullPointerException at com.travelsky.equal.frontandback.EqualDemo.equalByStringInFront(EqualDemo.java:7) at com.travelsky.equal.frontandback.EqualDemo.main(EqualDemo.java:32) 字符串常量在前面的调用equal方法,返回false
当输入的string变量为空的话,string.equal("")方式的调用就会报出空指针异常。所以在进行字符串相等比较的时候,除非两个比较的参数都是变量,否则建议使用“”.equal(string)方法
----------------------------------------------------------------------------------------------------------------------------
因为是在一个controller层的类里做的判断,,所以加上个小笔记:前端在向controller层传参的时候,例如加上&flag=和不加在判断时是有区别的,前者加了&flag=则flag 这个String是为空字符串的(分配了存储空间的),后者不加则是默认flag是为null的。。等于null的判断直接使用flag==null即可。