Hi,
I'm looking at Daniele's last commit and wondering if it's
really an improvement as stated in the commit log
(Improved loggings using StringBuilder appends instead of String 
chaining). Here is the patch:

-                    if (LOGGER.isLoggable(java.util.logging.Level.FINE))
-                            LOGGER.fine("Got empty intersection for 
granule "+this.toString()+ " with request "+request.toString());
+                    if (LOGGER.isLoggable(java.util.logging.Level.FINE)){
+                            LOGGER.fine(new StringBuilder("Got empty 
intersection for granule ").append(this.toString())
+                                    .append(" with request 
").append(request.toString()).append(" Resulting in no granule loaded: 
Empty result").toString());
+                    }

Ok, hard to read pasted like that, but you get the idea, instead
of concatenating together multiple string an inline StringBuilder
is used.

This certainly makes the code harder to read. Does it make it
faster, more scalable?

As far as I know, it does not, the version concatenating strings
is actually exactly the same as the one using StringBuilder once
compiled. From the java.lang.String javadoc:

----------------------------------------------------------------

The Java language provides special support for the string concatenation 
operator ( + ), and for conversion of other objects to strings. String 
concatenation is implemented through the StringBuilder(or StringBuffer) 
class and its append method. String conversions are implemented through 
the method toString, defined by Object and inherited by all classes in 
Java. For additional information on string concatenation and conversion, 
see Gosling, Joy, and Steele, The Java Language Specification.

----------------------------------------------------------------

To prove it's actually just counter productive to use explicit
StringBuilders for direct concatenation (as opposed to string
building in a loop or over more lines of code)
I wrote this little java code:


public class Concatenate {
     public static void main(String[] args) {
         String s1 = "abc " + Math.random() + " def";

         String s2 = new 
StringBuilder("abc").append(Math.random()).append("def").toString();
     }
}


and then went on the command line and got a disassembly of the generated
bytecode using javap, here we go:



Compiled from "Concatenate.java"
public class Concatenate extends java.lang.Object{
public Concatenate();
   Code:
    0:  aload_0
    1:  invokespecial   #8; //Method java/lang/Object."<init>":()V
    4:  return

public static void main(java.lang.String[]);
   Code:
    0:  new     #16; //class java/lang/StringBuilder
    3:  dup
    4:  ldc     #18; //String abc
    6:  invokespecial   #20; //Method 
java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
    9:  invokestatic    #23; //Method java/lang/Math.random:()D
    12: invokevirtual   #29; //Method 
java/lang/StringBuilder.append:(D)Ljava/lang/StringBuilder;
    15: ldc     #33; //String  def
    17: invokevirtual   #35; //Method 
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    20: invokevirtual   #38; //Method 
java/lang/StringBuilder.toString:()Ljava/lang/String;
    23: astore_1
    24: new     #16; //class java/lang/StringBuilder
    27: dup
    28: ldc     #42; //String abc
    30: invokespecial   #20; //Method 
java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
    33: invokestatic    #23; //Method java/lang/Math.random:()D
    36: invokevirtual   #29; //Method 
java/lang/StringBuilder.append:(D)Ljava/lang/StringBuilder;
    39: ldc     #44; //String def
    41: invokevirtual   #35; //Method 
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    44: invokevirtual   #38; //Method 
java/lang/StringBuilder.toString:()Ljava/lang/String;
    47: astore_2
    48: return

}


Can anybody see a difference between the first and the second
calculation?
If there is actually none, please, let's favor readability.

Cheers
Andrea

-- 
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to