Java - kopie proměných

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

Zamčeno
Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: 09 říj 2011 12:03
Kontaktovat uživatele:

Java - kopie proměných

Příspěvek od honzaik »

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
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7404
Registrován: 23 pro 2010 09:23

Re: Java - kopie proměných

Příspěvek od faraon »

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ů
Příspěvky: 1971
Registrován: 24 čer 2009 19:46
Bydliště: Královehradecký kraj
Kontaktovat uživatele:

Re: Java - kopie proměných

Příspěvek od domitea »

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: 09 říj 2011 12:03
Kontaktovat uživatele:

Re: Java - kopie proměných

Příspěvek od honzaik »

díky za upřesnění jak to funguje ;)
ello dere
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Bitová kopie poškozené SD karty - náhledy OK, fotky ne
    od simio.simsoft » » v Problémy s hardwarem
    1 Odpovědi
    3164 Zobrazení
    Poslední příspěvek od petr22

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