Run-time vs. Compile-time.

0 értékelés
20 megtekintés
kmark (4 pont) kérdezte Jan 12.

Sziasztok,

Valaki elmagyarázná, hogy az alábbi kódnak mi köze van a Run-time és a Compile-time-hoz? Illetve, hogy az első szelekció miért egyenlő, míg a második különbözik? 

        String a = "smart";
        String b = "sm" + "art";
        String c = " boy";

        if (a == b) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }

        if (a + c == "smart boy") {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }

1 Válasz

0 értékelés
karolyp (44 pont) válaszolta meg 5 napja
kmark kiválasztva 5 napja
 
Legjobb válasz

Tipp:

Az első esetben azért lesz true az eredmény, mivel a két String objektum referenciája megegyezik. Ez a két String objektum bekerül a heapbeli memóriába, és a literál értéke pedig a string poolban tárolódik.

A következő esetben te hozol létre egy új Stringet, ami azonban nem kerül be a heapbeli memóriába, ezért a referenciájuk nem egyezik meg.

A fordítási és futási időhöz kapcsolódó kérdésre: a kódnak nincs köze hozzá, mivel a String objektumok futási időben jönnek létre. Inkább az a kérdés, hogy hol jönnek létre.

Bővebben:
https://www.javatpoint.com/string-comparison-in-java
https://stackoverflow.com/questions/18866723/when-is-string-pool-create-in-java-at-compile-time-or-run-time
https://en.wikipedia.org/wiki/String_interning

...