According to Peter Haggar's book, Practical Hava (Praxis 31) the use of StringBuffer 
is several hundred times faster then String concatenation.  

Many compilers will perform constant folding and thereby generate optimal code.  In 
the example sited, we are using variables and therefore the StringBuffer is 
substantially better.  

The language by itself does not require this behavior.

Enjoy!
Rick

-----Original Message-----
From: Tom Jordahl [mailto:[EMAIL PROTECTED]
Sent: Monday, July 07, 2003 2:58 PM
To: '[EMAIL PROTECTED]'
Subject: RE: cvs commit: xml-axis/java/src/org/apache/axis
AxisFault.java


Eric,

My understanding was that Java would "take care of that" when it encountered string 
concatenation.  It would convert the x = a + b + c + .. + z; in to code that would do 
the "smart" appending.

And the other way was easier to read. :-)

P.S. Welcome to Open Source!
--
Tom Jordahl
Macromedia Server Development

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 27, 2003 1:43 AM
To: [EMAIL PROTECTED]
Subject: cvs commit: xml-axis/java/src/org/apache/axis AxisFault.java

ericf       2003/06/26 22:43:03

  Modified:    java/src/org/apache/axis AxisFault.java
  Log:
  replaced extensive String concatenation code with equivalent
  StringBuffer.append code to reduce object creation
  
  Revision  Changes    Path
  1.80      +32 -38    xml-axis/java/src/org/apache/axis/AxisFault.java
  
  Index: AxisFault.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/AxisFault.java,v
  retrieving revision 1.79
  retrieving revision 1.80
  diff -u -r1.79 -r1.80
  --- AxisFault.java    29 May 2003 11:59:56 -0000      1.79
  +++ AxisFault.java    27 Jun 2003 05:43:03 -0000      1.80
  @@ -313,49 +313,43 @@
        */
       public String dumpToString()
       {
  -        String details = new String();
  -
  +        StringBuffer buf = new StringBuffer("AxisFault");
  +        buf.append(JavaUtils.LS);
  +        buf.append(" faultCode: ");
  +        buf.append(XMLUtils.xmlEncodeString(faultCode.toString()));
  +        buf.append(JavaUtils.LS);
  +        buf.append(" faultSubcode: ");
  +        if (faultSubCode != null) {
  +            for (int i = 0; i < faultSubCode.size(); i++) {
  +                buf.append(JavaUtils.LS);
  +                buf.append(faultSubCode.elementAt(i).toString());
  +            }
  +        }
  +        buf.append(JavaUtils.LS);
  +        buf.append(" faultString: ");
  +        buf.append(XMLUtils.xmlEncodeString(faultString));
  +        buf.append(JavaUtils.LS);
  +        buf.append(" faultActor: ");
  +        buf.append(XMLUtils.xmlEncodeString(faultActor));
  +        buf.append(JavaUtils.LS);
  +        buf.append(" faultNode: ");
  +        buf.append(XMLUtils.xmlEncodeString(faultNode));
  +        buf.append(JavaUtils.LS);
  +        buf.append(" faultDetail: ");
           if (faultDetails != null) {
               for (int i=0; i < faultDetails.size(); i++) {
                   Element e = (Element) faultDetails.get(i);
  -                String namespace= e.getNamespaceURI();
  -                if(namespace==null) {
  -                    namespace="";
  -                }
  -                String partname= e.getLocalName();
  -                if(partname==null) {
  -                    partname=e.getNodeName();
  -                }
  -                details += JavaUtils.LS
  -                          + "\t{" + namespace + "}"
  -                          + partname + ": "
  -                          + XMLUtils.getInnerXMLString(e);
  -            }
  -        }
  -
  -        String subCodes = new String();
  -        if (faultSubCode != null) {
  -            for (int i = 0; i < faultSubCode.size(); i++) {
  -                subCodes += JavaUtils.LS
  -                            + (QName)faultSubCode.elementAt(i);
  +                buf.append(JavaUtils.LS);
  +                buf.append("\t{");
  +                buf.append(null == e.getNamespaceURI() ? "" : e.getNamespaceURI());
  +                buf.append("}");
  +                buf.append(null == e.getLocalName() ? "" : e.getLocalName());
  +                buf.append(":");
  +                buf.append(XMLUtils.getInnerXMLString(e));
               }
           }
  -        //encode everything except details and subcodes, which are already
  -        //dealt with one way or another.
  -        String code= XMLUtils.xmlEncodeString(faultCode.toString());
  -        String errorString= XMLUtils.xmlEncodeString(faultString);
  -        String actor= XMLUtils.xmlEncodeString(faultActor);
  -        String node= XMLUtils.xmlEncodeString(faultNode);
  -
  -
  -        return "AxisFault" + JavaUtils.LS
  -            + " faultCode: " + code + JavaUtils.LS
  -            + " faultSubcode: " + subCodes + JavaUtils.LS
  -            + " faultString: " + errorString + JavaUtils.LS
  -            + " faultActor: " + actor + JavaUtils.LS
  -            + " faultNode: " + node + JavaUtils.LS
  -            + " faultDetail: " + details + JavaUtils.LS
  -            ;
  +        buf.append(JavaUtils.LS);
  +        return buf.toString();
       }
   
       /**
  
  
  


Reply via email to