2012-08-13 7 views
10

Ein Quickie Ruhe zu bekommen einfach:
Unter Berücksichtigung der folgendenWird String.length() für einen letzten String aufgerufen?

final String str = "This is the end"; 

str.length() zur Laufzeit ausgewertet wird, oder ist es als 15 in den Bytecode hartkodierte?

+3

Der 'javac' Compiler ist unwahrscheinlich, es zu optimieren, die JIT ist jedoch sehr wahrscheinlich, wenn Sie den Code genug ausführen, um es aufzuwärmen. –

+0

Warum kümmern? Dies ist wahrscheinlich JVM-Implementierung abhängig, aber es wird wahrscheinlich schnell unter und JVM sein. Stellt sich heraus, dass dies ein Leistungsengpass ist (unwahrscheinlich), wird dies vom Profiler angezeigt. –

+0

Strings sind in Java unveränderlich. Es spielt keine Rolle, ob Sie die Variable 'final' machen oder nicht. – Jesper

Antwort

12

str.length()wird zur Laufzeit ausgewertet. final bedeutet, dass der Wert der Referenz nicht geändert werden kann. Es hat nichts mit der Saite selbst zu tun.

Wenn Sie jedoch den Quellcode schauen Sie in der String werden Sie sehen, dass length() den Wert eines Feldes zurück, so dass keine Berechnung erfolgt, wird der Wert os einfach lesen ...

2

Im Bytecode wird die Methode ausgewertet.

Allerdings wird der Aufruf der Methode wahrscheinlich während jit compilation

Der Code für die String.length() -Methode inlined ist wie folgt:

public int length() { 
    return count; 
} 

Ich glaube nicht, dass die Referenz Zu der Saite wird in diesem Fall das Inlining als endgültig erklärt.

+0

Und das würde bedeuten ... der Wert wird @ Runtime ausgewertet und dann von jit codiert? – MadProgrammer

Verwandte Themen