Java - kopie proměných Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Java - kopie proměných  Vyřešeno

Příspěvekod honzaik » 26 říj 2013 20:28

Tak jsem si myslel že mě už taková základní věc v javě nepřekvapí, ale stalo se :D. Mám úplně jednoduchý kód

Kód: Vybrat vše

public class Derp{

   public static void main(String[] args) {
      byte[] d = {0,1,1,1,1,5};
      byte[] b = d;
      System.out.println(d[0]);
      System.out.println(b[0]);
      d[0] = 15;
      System.out.println(d[0]);
      System.out.println(b[0]);
   }
}

a výstup je

Kód: Vybrat vše

0
0
15
15

a nechápu, nebo spíše mě děsí že to tahle funguje. prostě když upravím jednu proměnou tak to automaticky změní i tu že které se "zkopírovala", funguje to i obráceně. jak se dá teda zkopírovat obsah jedné proměnné do druhé a poté samostatně upravovat její obsah bez upravování té druhé :D
logicky bych chápal že to udělá kopii té proměnné a pak už je to nijak nespojuje a tak to funguje všude (myslím si)
// aha tak to tak funguje v javascriptu i c# takže asi všude :D
ello dere

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Java - kopie proměných

Příspěvekod faraon » 26 říj 2013 21:42

Tohle funguje jen pro jednotlivé proměnné. Pole se nekopírují, předává se na ně přímo adresa, takže normálně upravuješ to původní...
Dokonce je takhle možné, i když jen v určitých případech, měnit konstanty, třeba řetězce zapsané přímo v kódu programu!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Java - kopie proměných

Příspěvekod domitea » 26 říj 2013 21:48

Klasická začátečnická chyba u nás na škole.

Pole b je pointer(*d) na pole d. Takže když měníš b, měníš vlastně d, ale když měníš d, tak měníš d. Na tohle si dávej hlavně pozor u objektů, protože dané názvy "uchovávají" pouze adresu na nějaký objekt! Naopak u primitivních typů (ty co mají malé písmeno na začátku) "uchovávají" hodnotu ;)

A to Javu nemám rád a tak hezky to umím :?

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Java - kopie proměných

Příspěvekod honzaik » 26 říj 2013 22:25

díky za upřesnění jak to funguje ;)
ello dere


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Bitová kopie poškozené SD karty - náhledy OK, fotky ne Příloha(y)
    od simio.simsoft » 18 pro 2024 21:59 » v Problémy s hardwarem
    1
    2748
    od petr22 Zobrazit poslední příspěvek
    18 pro 2024 23:15

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti