2013-03-11 3 views
13

Code-Beispiel:Wie findet man in Intellij Idea ohne laufendem Code die Konkatenation von statischen Strings?

public class StringHolder{ 
    public static final String ONE = "ONE"; 
    public static final String TWO = "TWO"; 
    public static final String THREE = "THREE"; 

    public static void main (String[] args){ 
     String someVariable = ONE + TWO + THREE; 
    } 
} 

Wie ich String-Wert von statischen Konstanten auswerten kann ?. Zum Beispiel kann ich mit Intellij Idea ein Programm im Debug ausführen, einen Unterbrechungspunkt setzen, "ctrl + alt + f8" auf den Ausdruck drücken und den Ausdruckswert sehen. Also ist das möglich, dies mit statischem Analysator ohne Kompiliercode und laufendes Programm auszuwerten? Der Schlüsselpunkt ist der Wert berechnet aus statische Konstanten nicht von Funktionsparameter, so Analyzer einfach "go" auf den konstanten Wert, verketten sie und zeigen Sie mir Wert in Pop-up-Fenster.

Eine andere Situation, wenn ich einen Block und "gerade initialisiert" Variablen:

{ 
    final String a = "a"; 
    final String b = "b" 
    final String c = "c" 
    String result = a+b+c; 
} 

P. S. Hast du mich verstanden? :)

+0

Sehen Sie wo? Deine Frage ist unvollständig. – Perception

+0

Ich habe die Frage bearbeitet. – Cherry

Antwort

21

Es ist leicht, mit IntelliJ IDEA 14:

  1. nur setzen Cursor auf die String-Verkettung
  2. Press alt + eingeben
  3. Wählen Sie "Copy String Verkettung Text in die Zwischenablage"
  4. Paste Ergebnis irgendwo.
+0

danke, beachten Sie, dass Sie nur endgültige Variablen und Literale verwenden können. Sonst wirst du bekommen? als Wert –

+0

Danke. Nützliche Verknüpfung. Beachten Sie, dass die Verkettung in sehr seltenen Fällen nicht zutrifft. Zum Beispiel "String text = 'A' + 1 +" ";" Diese Verknüpfung wird in die Zwischenablage "A1" anstelle des realen Wertes von 'text' (66) kopiert. IntelliJ Version 2016.3 – KernelMode

3

Sie wäre in der Lage, die Kompilierung-verkettete Zeichenfolge "ONETWOTHREE" von decompiling Bytecode zu sehen:

javap -c StringHolder 

und Blick auf die erste Aufgabe.

Die Verkettung für first + second + third wird noch zur Ausführungszeit statt Kompilierung Zeit durchgeführt wird, würde ich so erwarte Code zu sehen StringBuilder oder StringBuffer verwenden, und es wird, ohne das kein „Ergebnis“ der String-Verkettung sein Code.

0
public static final String ONE = "ONE"; 
public static final String TWO = "TWO"; 
public static final String THREE = "THREE"; 

sind Kompilierung Konstanten und werden während der Kompilierung inlined werden.

So können Sie das Ergebnis in der Datei .class durch Dekompilierung generiert sehen. Der andere result wird bis zur Laufzeit nicht sichtbar sein.

Für someVariable werden Sie so etwas wie someVariable = "ONETWOTHREE"; im dekompilierten Code sehen. Der Compiler macht dies zur Optimierung und ist somit sichtbar.

Verwandte Themen