Avoid String concatenation in loops. Replace with StringBuilder.append().
diff --git a/src/main/java/org/apache/commons/ognl/ASTAdd.java b/src/main/java/org/apache/commons/ognl/ASTAdd.java
index 89885e9..950c9de 100644
--- a/src/main/java/org/apache/commons/ognl/ASTAdd.java
+++ b/src/main/java/org/apache/commons/ognl/ASTAdd.java
@@ -143,7 +143,7 @@
     {
         try
         {
-            String result = "";
+            StringBuilder result = new StringBuilder();
             NodeType lastType = null;
 
             // go through once to determine the ultimate type
@@ -183,7 +183,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result += " " + getExpressionOperator( i ) + " ";
+                        result.append(" ").append(getExpressionOperator(i)).append(" ");
                     }
 
                     String expr = children[i].toGetSourceString( context, target );
@@ -282,7 +282,7 @@
                         }
                     }
 
-                    result += expr;
+                    result.append(expr);
 
                     // hanlde addition for numeric types when applicable or just string concatenation
 
@@ -298,10 +298,10 @@
                                 || ASTProperty.class.isInstance( children[i] )
                                 || ASTChain.class.isInstance( children[i] ) )
                             {
-                                result += ".";
+                                result.append(".");
                             }
 
-                            result += OgnlRuntime.getNumericValueGetter( context.getCurrentType() );
+                            result.append(OgnlRuntime.getNumericValueGetter(context.getCurrentType()));
                             context.setCurrentType( OgnlRuntime.getPrimitiveWrapperClass( context.getCurrentType() ) );
                         }
                     }
@@ -335,7 +335,7 @@
                 throw OgnlOps.castToRuntime( t );
             }
 
-            return result;
+            return result.toString();
 
         }
         catch ( Throwable t )
diff --git a/src/main/java/org/apache/commons/ognl/ASTCtor.java b/src/main/java/org/apache/commons/ognl/ASTCtor.java
index b3d33cc..37603d3 100644
--- a/src/main/java/org/apache/commons/ognl/ASTCtor.java
+++ b/src/main/java/org/apache/commons/ognl/ASTCtor.java
@@ -142,7 +142,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = "new " + className;
+        StringBuilder result = new StringBuilder("new " + className);
 
         Class clazz = null;
         Object ctorValue = null;
@@ -179,30 +179,28 @@
                 if ( children[0] instanceof ASTConst )
                 {
 
-                    result = result + "[" + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else if ( ASTProperty.class.isInstance( children[0] ) )
                 {
 
-                    result =
-                        result + "[" + ExpressionCompiler.getRootExpression( children[0], target, context )
-                            + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(ExpressionCompiler.getRootExpression(children[0], target, context)).append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else if ( ASTChain.class.isInstance( children[0] ) )
                 {
 
-                    result = result + "[" + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else
                 {
 
-                    result = result + "[] " + children[0].toGetSourceString( context, target );
+                    result.append("[] ").append(children[0].toGetSourceString(context, target));
                 }
 
             }
             else
             {
-                result = result + "(";
+                result.append("(");
 
                 if ( ( children != null ) && ( children.length > 0 ) )
                 {
@@ -284,7 +282,7 @@
                     {
                         if ( i > 0 )
                         {
-                            result = result + ", ";
+                            result.append(", ");
                         }
 
                         String value = expressions[i];
@@ -329,11 +327,11 @@
                             }
                         }
 
-                        result += value;
+                        result.append(value);
                     }
 
                 }
-                result = result + ")";
+                result.append(")");
             }
 
             context.setCurrentType( ctorValue != null ? ctorValue.getClass() : clazz );
@@ -348,7 +346,7 @@
 
         context.remove( "_ctorClass" );
 
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTList.java b/src/main/java/org/apache/commons/ognl/ASTList.java
index 9709c5d..f481c6c 100644
--- a/src/main/java/org/apache/commons/ognl/ASTList.java
+++ b/src/main/java/org/apache/commons/ognl/ASTList.java
@@ -66,14 +66,8 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = "";
-        boolean array = false;
-
-        if ( parent != null && ASTCtor.class.isInstance( parent ) && ( (ASTCtor) parent ).isArray() )
-        {
-
-            array = true;
-        }
+        StringBuilder result = new StringBuilder();
+        boolean array = ASTCtor.class.isInstance(parent) && ((ASTCtor) parent).isArray();
 
         context.setCurrentType( List.class );
         context.setCurrentAccessor( List.class );
@@ -84,10 +78,10 @@
             {
                 return "java.util.Arrays.asList( new Object[0])";
             }
-            result += "java.util.Arrays.asList( new Object[] ";
+            result.append("java.util.Arrays.asList( new Object[] ");
         }
 
-        result += "{ ";
+        result.append("{ ");
 
         try
         {
@@ -96,7 +90,7 @@
             {
                 if ( i > 0 )
                 {
-                    result = result + ", ";
+                    result.append(", ");
                 }
 
                 Class prevType = context.getCurrentType();
@@ -194,7 +188,7 @@
                 {
                     value = "null";
                 }
-                result += value;
+                result.append(value);
             }
 
         }
@@ -206,13 +200,13 @@
         context.setCurrentType( List.class );
         context.setCurrentAccessor( List.class );
 
-        result += "}";
+        result.append("}");
 
         if ( !array )
         {
-            result += ")";
+            result.append(")");
         }
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTMethod.java b/src/main/java/org/apache/commons/ognl/ASTMethod.java
index 4b369aa..80d33b3 100644
--- a/src/main/java/org/apache/commons/ognl/ASTMethod.java
+++ b/src/main/java/org/apache/commons/ognl/ASTMethod.java
@@ -274,7 +274,7 @@
         }
 
         String post = "";
-        String result = "." + method.getName() + "(";
+        StringBuilder result = new StringBuilder("." + method.getName() + "(");
 
         if ( method.getReturnType() != void.class && method.getReturnType().isPrimitive() && ( parent == null
             || !ASTTest.class.isInstance( parent ) ) )
@@ -310,7 +310,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result += ", ";
+                        result.append(", ");
                     }
 
                     Class prevType = context.getCurrentType();
@@ -373,7 +373,7 @@
                             ASTMethodUtil.getParmString( context, parms[i], parmString, child, valueClass, ".class)" );
                     }
 
-                    result += parmString;
+                    result.append(parmString);
                 }
 
                 if ( prevCast != null )
diff --git a/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java b/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
index c41a8bb..586bc33 100644
--- a/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
+++ b/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
@@ -84,7 +84,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = className + "#" + methodName + "(";
+        StringBuilder result = new StringBuilder(className + "#" + methodName + "(");
 
         try
         {
@@ -113,7 +113,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result = result + ", ";
+                        result.append(", ");
                     }
 
                     Class prevType = context.getCurrentType();
@@ -162,11 +162,11 @@
                         }
                     }
 
-                    result += parmString;
+                    result.append(parmString);
                 }
             }
 
-            result += ")";
+            result.append(")");
 
             try
             {
@@ -192,7 +192,7 @@
             throw OgnlOps.castToRuntime( t );
         }
 
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/Evaluation.java b/src/main/java/org/apache/commons/ognl/Evaluation.java
index 7b1b121..e348dac 100644
--- a/src/main/java/org/apache/commons/ognl/Evaluation.java
+++ b/src/main/java/org/apache/commons/ognl/Evaluation.java
@@ -277,33 +277,32 @@
      */
     public String toString( boolean compact, boolean showChildren, String depth )
     {
-        String stringResult;
+        StringBuilder stringResult;
 
         if ( compact )
         {
-            stringResult = depth + "<" + node.getClass().getName() + " " + System.identityHashCode( this ) + ">";
+            stringResult = new StringBuilder(depth + "<" + node.getClass().getName() + " " + System.identityHashCode(this) + ">");
         }
         else
         {
             String ss = ( source != null ) ? source.getClass().getName() : "null", rs =
                 ( result != null ) ? result.getClass().getName() : "null";
 
-            stringResult =
-                depth + "<" + node.getClass().getName() + ": [" + ( setOperation ? "set" : "get" ) + "] source = " + ss
-                    + ", result = " + result + " [" + rs + "]>";
+            stringResult = new StringBuilder(depth + "<" + node.getClass().getName() + ": [" + (setOperation ? "set" : "get") + "] source = " + ss
+                    + ", result = " + result + " [" + rs + "]>");
         }
         if ( showChildren )
         {
             Evaluation child = firstChild;
 
-            stringResult += "\n";
+            stringResult.append("\n");
             while ( child != null )
             {
-                stringResult += child.toString( compact, depth + "  " );
+                stringResult.append(child.toString(compact, depth + "  "));
                 child = child.next;
             }
         }
-        return stringResult;
+        return stringResult.toString();
     }
 
     /**