Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 7 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 26.11.07
Prihlásený: 12.04.19
Príspevky: 143
Témy: 25
Bydlisko: Šurany
Príspevok NapísalOffline : 26.03.2016 17:31

Zdravim, chcem sa opytat na predavanie arguemntov do metody. Preco sa zmeni hodnota prvkov pola mojeP po tomto prikaze "mojeP2 = doublePole1(mojeP);", ked Java by mala pracovat len s hodnotami prvkov toho pola? Pri pouziti metody doublePole2 je vsetko OK, tak by to ale malo byt aj pri doublePole1 metode.

Kód:
public class MyClass{

     public static void main(String []args){
        int mojeP[] = {1,2,3};
        int mojeP2[] = new int[3];
        zobrazPole(mojeP);        // vypise 1,2,3
        mojeP2 = doublePole1(mojeP);
        zobrazPole(mojeP);        // vypise 2,4,6
        zobrazPole(mojeP2);
       
     }
     
     static int[] doublePole1(int[] pole){
        for (int i=0; i < pole.length; i++){
            pole[i] *= 2;
        }
        return pole;
     }
     
     static int[] doublePole2(int[] pole){
        int[] pole2 = new int[pole.length];
        for (int i=0; i < pole.length; i++){
            pole2[i] = 2*pole[i];
        }
        return pole2;
     }
     
     static void zobrazPole(int[] pole){
      for (int i=0; i < pole.length; i++){
            System.out.print(pole[i] + ", ");
        }
        System.out.println();
     }   
}


Skusil som si vytvorit aj jednoduchsi program na skusku a tuto funguje vsetko tak ako ma - x nenadobudne novu hodnotu pokial nepriradim vysledok metody do x.

Kód:
public class MyClass{

     public static void main(String []args){
        int x = 10;
        doubleNum(x);
        zobraz(x);    // vypise 10
    }
     
     static int doubleNum(int y){
         return y *= 2;
     }
     
     static void zobraz(int y){
         System.out.println(y);
     }
}







_________________
MB:MSI Z77A-G43 CPU:Intel Core i5-3570K 3,4Ghz CPU Cooler:Silentium PC - Fortis 2 XE1226 GPU:Gainward GTX970 Phantom RAM:Kingston 16GB DDR3 PSU:EVGA 500B Case:Cooler Master Elite 372 SSD:Samsung 860 EVO 250 GB HDD1:WD Caviar Blue 1TB HDD2:Seagate Barracuda 500GB 7200rpm
Offline

Užívateľ
Užívateľ
Java - passing arguments by value

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50
Bydlisko: Žilina, Pop...
Príspevok NapísalOffline : 26.03.2016 17:56

Ved to je v pohode nie ? V jave mozes vytvorit smernik, poslat ho do funkcie a mozes zmenit data na ktore ukazuje, co je tvoj pripad, kedze pole je len struktura plna smernikov. Vec v tvojom kode je taka, ze doublePole2 vrati referenciu na nove pole v pamati, ktore tam vytvoris. Tuto referenciu nasledne v main priradzujes do premennej mojeP2 a vyspises ju ako poslednu. Vsetko teda funguje presne tak ako fungovat ma :)

Ak si to potrebujes poriadne pozriet skus si to krokovat v nejakom ladiacom nastroji tvojho vyvojoveho prostredia :)







_________________
rMBP 13 2015
iPhone 7
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 26.11.07
Prihlásený: 12.04.19
Príspevky: 143
Témy: 25
Bydlisko: Šurany
Príspevok Napísal autor témyOffline : 27.03.2016 13:30

Len nechapem, preco v druhom priklade to funguje odlisne od doublePole1. Premenna x vstupuje ako argument do funkcie a predsa sa neprepise. A to pouzivam lokalnu premennu y ako vstupny argument a aj vystupny. Nepouzivam napr. return y2.







_________________
MB:MSI Z77A-G43 CPU:Intel Core i5-3570K 3,4Ghz CPU Cooler:Silentium PC - Fortis 2 XE1226 GPU:Gainward GTX970 Phantom RAM:Kingston 16GB DDR3 PSU:EVGA 500B Case:Cooler Master Elite 372 SSD:Samsung 860 EVO 250 GB HDD1:WD Caviar Blue 1TB HDD2:Seagate Barracuda 500GB 7200rpm
Offline

Užívateľ
Užívateľ
Java - passing arguments by value

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50
Bydlisko: Žilina, Pop...
Príspevok NapísalOffline : 27.03.2016 16:55

No ved to je vsetko spravne nie ? Ako som ti povedal v doublePole1 ty prechadzas po referenciach na hodnoty prvkov pola a upravujes ich hodnoty. V druhom priklade sa ti pri volani tej metody skopiruje na poziciu v pamati ukazovanu premennou y hodnota ktora je v pamati na pozici udavanou smernikom x. Kedze ty menis hodnotu na pozici y tak sa ti x nikdy nezmeni, fungovalo by to iba v pripade ak by java bola pass by reference, co nie je.







_________________
rMBP 13 2015
iPhone 7
Offline

Užívateľ
Užívateľ
Java - passing arguments by value

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 28.03.2016 18:52

Pole je objekt. Objekty su v Jave predavane metodam referenciou (by-reference). doublePole1() dostava odkaz na pole a priamo ho upravuje. DoublePole2() prekopiruje predane pole a potom ho po uprave vrati. DoubleNum() ma parameter typu int co je premenna primitivneho datoveho typu a tie sa predavaju hodnotou (by-value). Primitivne datove typy, kt. sa predavaju hodnotou: byte, short, int, long, float, double, char, boolean.







_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Java - passing arguments by value

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50
Bydlisko: Žilina, Pop...
Príspevok NapísalOffline : 28.03.2016 22:18

http://javadude.com/articles/passbyvalue.htm

Ziadne objekty v jave nie su predavane referenciu. Tento celkovy clanok to snad vyjasni.







_________________
rMBP 13 2015
iPhone 7
Offline

Užívateľ
Užívateľ
Java - passing arguments by value

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 28.03.2016 22:34

Citácia:
Objekty su v Jave predavane metodam referenciou.

To je pravda, nebolo to myslené tak, že môžeme zmeniť, na ktorý objekt premenná odkazuje, ale ten objekt, na ktorý sme dostali odkaz upravovať môžeme a to s dôsledkami aj po ukončení metódy.







_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Odpovedať na tému [ Príspevkov: 7 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. dobre java navody a nova tema JAVA

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Assembler, C, C++, Pascal, Java

35

5424

09.03.2009 17:14

tlacitko Enter Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rozdiel medzi Java Standard a Java EE

v Assembler, C, C++, Pascal, Java

1

837

02.04.2014 12:41

XOLOO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. textarea value

v HTML, XHTML, XML, CSS

5

477

26.10.2009 18:37

pilná lama glama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyprázdnenie value

v JavaScript, VBScript, Ajax

13

587

30.07.2009 9:30

Draex Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Option value

v HTML, XHTML, XML, CSS

7

545

28.03.2010 19:22

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. SB Live Value

v Zvuk

4

925

01.10.2005 10:11

Lukas[CZE] Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. odoslanie button value

v JavaScript, VBScript, Ajax

3

581

18.09.2009 14:02

pilná lama glama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. MySQL default value

v Databázy

3

715

30.05.2010 18:05

DARSON Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. href value z iframe

v JavaScript, VBScript, Ajax

2

357

04.09.2012 13:20

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zmena value v textfield

v JavaScript, VBScript, Ajax

10

608

04.10.2009 21:31

pilná lama glama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. value pri type file

v HTML, XHTML, XML, CSS

1

499

25.06.2007 7:03

zero0x Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Inputs value pomocou PHP

v PHP, ASP

2

249

27.06.2013 19:53

maťo* Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Best Value PC - do 550E

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PC zostavy

36

1223

07.07.2015 8:59

stewinko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Genius SW-5.1 Value

v Zvuk

5

919

13.01.2009 23:28

wwwirko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Creative SoundBlaster Audigy 2 Value

v Zvuk

12

1291

23.09.2005 17:24

BIO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. genius sound maker value 5.1

v Ovládače

6

864

27.06.2008 13:46

Andres28791 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra