<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pamiętnik programisty &#187; j2se</title>
	<atom:link href="http://piotr.doniec.eu/devlog/tag/j2se/feed/" rel="self" type="application/rss+xml" />
	<link>http://piotr.doniec.eu/devlog</link>
	<description></description>
	<lastBuildDate>Wed, 28 Dec 2011 23:52:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Pass-By-Value w Javie</title>
		<link>http://piotr.doniec.eu/devlog/2009/03/pass-by-value-w-javie/</link>
		<comments>http://piotr.doniec.eu/devlog/2009/03/pass-by-value-w-javie/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:24:23 +0000</pubDate>
		<dc:creator>pejotr</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[common error]]></category>
		<category><![CDATA[j2se]]></category>

		<guid isPermaLink="false">http://piotr.doniec.eu/devlog/?p=67</guid>
		<description><![CDATA[Mimo że Java jest uznawana za uproszczoną i okrojoną wersję C++ to są w niej kruczki których bez koniecznej wiedzy rozwiązać się nie da. Sposób przekazywania argumentów do metod jest szczególnie kłopotliwy dla początkujących w Javie. Ja mimo że sądziłem że trochę się z językiem już zaznajomiłem, brzydko mówiąc &#8222;naciąłem&#8221; się na teście sprawdzającym wiedzę [...]]]></description>
			<content:encoded><![CDATA[<p>Mimo że Java jest uznawana za uproszczoną i okrojoną wersję C++ to są w niej kruczki których bez koniecznej wiedzy rozwiązać się nie da. Sposób przekazywania argumentów do metod jest szczególnie kłopotliwy dla początkujących w Javie. Ja mimo że sądziłem że trochę się z językiem już zaznajomiłem, brzydko mówiąc &#8222;naciąłem&#8221; się na teście sprawdzającym wiedzę z zakresu podstaw OO właśnie na pytaniu z przekazywaniem parametrów.<br />
Kod wyglądał tak:<span id="more-67"></span></p>
<pre class="brush: java">
class A {
  public int a = 1;
  public String b = &quot;a&quot;;
}

public class B {
  private static void aMethod(A a) {
    a.a = 2;
    a.b = &quot;b&quot;;
    a = new A();
  }

  public static void main(String[] args) {
    A a = new A();
    aMethod(a);
    System.out.println(a.a+&quot; &quot;+a.b);
  }
}
</pre>
<p>Pamiętałem że tylko typy wbudowane są przekazywane przez wartość a pozostałe, dziedziczące po Object, już przez referencję. Ale okazało się że się trochę pomyliłem. Java owszem przekazuje referencję do metody, ale jest to tylko kopia oryginalnej referencji ! Dlatego można zmienić zawartość pól tak przekazanego obiektu, ale próba przestawienia referencji gdzieś indziej nie powiedzie się ! Graficznie można to przedstawić tak:<img class="aligncenter size-full wp-image-69" title="pass-by-value" src="http://piotr.doniec.eu/devlog/wp-content/uploads/2009/03/pass-by-value.png" alt="pass-by-value" width="372" height="295" /><br />
Robiąc <code>a = new A();</code> w aMethod(&#8230;) przestawiamy tylko kopię referencji, a dokonane wcześniej zmiany będą widoczne w instancji &#8216;a&#8217; po opuszczeniu metody.</p>
<p>Do tego pomyłka w pytaniu czy wszystkie klasy mają klasę bazową.A no mają Object, tylko że Object juz po niczym nie dziedziczy, głupia pomyłka&#8230; Ale mimo wszystko żółty pas jest i widoczny na pierwszej stronie <a href="http://www.javablackbelt.com">www.javablackbelt.com</a> przez najbliższe 24h będę ;]</p>
]]></content:encoded>
			<wfw:commentRss>http://piotr.doniec.eu/devlog/2009/03/pass-by-value-w-javie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

