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(); } /**
