Hirdetés

Új hozzászólás Aktív témák

  • public static void main(String[] args) {
            String s1=new String(args[0]);  
            String s11=new String(args[0]);  
            System.out.println(s1.intern() == s11.intern());
            String s2="alma";  
            System.out.println(s1==s2);
              
        }

    (a main "alma" paraméter kap.)

    1. Tudna valaki magyarázatot, miért lesz a konzol kimenete a true/true a fenti esetben?
    Úgy tudom a String immutable. Az s1 a heap-en jön létre az s2 literál az SCP-n ül.
    Az intern() miatt átkerül az SCP-re? :F

    2. Amit végképp nem értek, ha a 3.és 4.utasításokat felcserélem akkor true/false a kimenet.

    Ez egész jó ki feladat.
    Szóval a programban nem szerepel a 4. sorig "alma", ezért a közös String poolban sem.
    Mivel az 1. és 2. parancs a new kulcsszavat használja, ezért mindkét String a heapbe kerül.
    Az intern, amíg a pool-ban nem szerepel az érték, átrakja oda. Ergo az s1 átkerül, az s11 nem, az s2 pedig az intern után van, ez csak rámutat az s1-re.
    Ha felcseréled a 3. és 4. parancsot, az s2 már az s1.intern előtt megcsinálja az almát a pool-ban, így az intern nem fogja az s1-et átmozgatni, ergo 3 különböző memóriacímet foglalsz (1-et a pool-ban kettőt pedig a new-k miatt a HEAP-ben).

    Ki tudod próbálni ha az s11 és s2 közé is raksz "=="-t ;)

Új hozzászólás Aktív témák