StringBuffer赋空值

Excel文件批量导入报价,校验"证书"并连接多个"证书"时的JAVA代码如下:

[c-sharp] view plaincopy

 

StringBuffer certify = new StringBuffer();  

  

……  

  

case 11: // 校验证书(1):FAA8130-3 FORM  

if (rowData[11] != null && !rowData[11].equals(""))  

     certify.append("FAA8130-3 FORM");  

  

case 12: // 校验证书(2):EASA FORM1  

10 if (rowData[12] != null && !rowData[12].equals("")) {  

11      if (certify.toString().equals(""))  

12     certify.append("EASA FORM1");  

13      else                     

14         certify.append(", EASA FORM1");  

15 }  

 

 

原先用的certify.equals("")方法判断StringBuffer的值是否为空值,但是发现certify为空值时,if返回都是false,后来上网看到这段才恍然大悟:

原来Objectequals()方法跟 == 是一样的 , 
public boolean equals(Object obj) { 
    return (this == obj); 
    } 
StringBuffer没有重写equals方法,所以 
StringBuffer a = new StringBuffer(a); 
StringBuffer b = new StringBuffer(a); 
a.equals(b);这句跟a==b的效果一样,返回是false。 

string则重写了equals方法。 
public boolean equals(Object anObject) { 
    if (this == anObject) { 
        return true; 
    } 
    if (anObject instanceof String) { 
        String anotherString = (String)anObject; 
        int n = count; 
        if (n == anotherString.count) { 
        char v1[] = value; 
        char v2[] = anotherString.value; 
        int i = offset; 
        int j = anotherString.offset; 
        while (n-- != 0) { 
            if (v1[i++] != v2[j++]) 
            return false; 
        } 
        return true; 
        } 
    } 
    return false; 
    }

StringBuffer类型certify.equals("")判断的是certify和字符""是否为同一个对象,结果肯定不是。所以需要判断StringBuffer字符值是否相等,需要用certify.toString().equals("")判断才行。

 

<!--EndFragment-->

你可能感兴趣的:(java)