[ 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 | 25
Bydlisko: Šurany
NapísalOffline : 26.03.2016 17:31 | Java - passing arguments by value

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 | 50
Bydlisko: Žilina, Pop...
NapísalOffline : 26.03.2016 17:56 | Java - passing arguments by value

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 | 25
Bydlisko: Šurany
Napísal autor témyOffline : 27.03.2016 13:30 | Java - passing arguments by value

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 | 50
Bydlisko: Žilina, Pop...
NapísalOffline : 27.03.2016 16:55 | Java - passing arguments by value

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 | 3
Bydlisko: Košice - ok...
NapísalOffline : 28.03.2016 18:52 | Java - passing arguments by value

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 | 50
Bydlisko: Žilina, Pop...
NapísalOffline : 28.03.2016 22:18 | Java - passing arguments by value

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 | 3
Bydlisko: Košice - ok...
NapísalOffline : 28.03.2016 22:34 | Java - passing arguments by value

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]
 [ Príspevkov: 7 ] 


Java - passing arguments by value



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

5562

09.03.2009 17:14

tlacitko Enter

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

907

02.04.2014 12:41

XOLOO

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

textarea value

v HTML, XHTML, XML, CSS

5

518

26.10.2009 18:37

pilná lama glama

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

vyprázdnenie value

v JavaScript, VBScript, Ajax

13

632

30.07.2009 9:30

Draex

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

Option value

v HTML, XHTML, XML, CSS

7

585

28.03.2010 19:22

Ďuri

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

SB Live Value

v Zvuk

4

973

01.10.2005 10:11

Lukas[CZE]

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

MySQL default value

v Databázy

3

754

30.05.2010 18:05

DARSON

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

odoslanie button value

v JavaScript, VBScript, Ajax

3

612

18.09.2009 14:02

pilná lama glama

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

href value z iframe

v JavaScript, VBScript, Ajax

2

392

04.09.2012 13:20

neopagan

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

zmena value v textfield

v JavaScript, VBScript, Ajax

10

652

04.10.2009 21:31

pilná lama glama

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

value pri type file

v HTML, XHTML, XML, CSS

1

525

25.06.2007 7:03

zero0x

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

Inputs value pomocou PHP

v PHP, ASP

2

279

27.06.2013 19:53

maťo*

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

1327

07.07.2015 8:59

stewinko

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

Genius SW-5.1 Value

v Zvuk

5

975

13.01.2009 23:28

wwwirko

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

Creative SoundBlaster Audigy 2 Value

v Zvuk

12

1329

23.09.2005 17:24

BIO

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

pomoc javascript each(function(index, value)

v JavaScript, VBScript, Ajax

1

341

01.11.2013 9:05

Unlink



© 2005 - 2024 PCforum, edited by JanoF