carookee - group communication for you
Home / JavaForum / Java allgemein
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
5.237 User online
0 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 73 von 2212 (3%) |<   <   >   >|

Autor m3
Datum 29.10.01, 11:02
Betreff war: int zu String, Performance


wandelt man ein int via
"" + constValue
in einen String um, so ist dies um einen beträchtlichen Faktor schnelle als
String.valueOf( i );

Das schlägt um, wenn man statt einer Konstanten eine Variable verwendet.
public class PerfAnal {
    public static void main( String[] args ) {
        //int loopCounter = Integer.MAX_VALUE;
        int loopCounter = 2000000;
        //constValue:
        //String.valueOf( 10 ): 5330
        //new String( "" + 10): 1810
        //"" + 10: 60
        //variable ( i ):
        //String.valueOf( i ): 5930
        //new String( "" + i ): 32730
        //"" + i: 18780
        
        String s;
        long start=System.currentTimeMillis();
        for( int i = 1; i<loopCounter; i++ ) {
            s = "" + i;
        }
        long ende=System.currentTimeMillis();
        System.out.println("Test1: "+(ende-start));
        
        start=System.currentTimeMillis();
        for( int i = 1; i < loopCounter; i++ ) {
            s=new String( "" + i );
        }
        ende=System.currentTimeMillis();
        System.out.println("Test2: "+(ende-start));
        
        start=System.currentTimeMillis();
        for( int i = 1; i < loopCounter; i++ ) {
            s=String.valueOf( i );
        }
        ende=System.currentTimeMillis();
        System.out.println("Test3: "+(ende-start));
        
        System.out.println( );
    }
}

Ich nehme an, dies liegt daran, dass es in dem internen Speicher der JVM eine kanonische Form eines jeden String gibt. "" + 10; gibt also stets die Referenz auf den selben String zurück. Bei einer Variablen geht das nicht.
Die Moral von der Geschicht?
1.: Nicht immer ist alles so, wie es scheint.
2.: Wer viel misst, misst Mist

m3


 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com