Czym są prymitywy w tablicach ? Po co są i jak działają ?
'Prymitywy' (lepiej chyba brzmi 'typy prymitywne', choc oba sie moga kojarzyc bardziej z ludzmi niz z Java ;) ) to wszystkie typy zmiennych w Javie, ktore nie sa obiektami. Java tak naprawde, w przeciwienstwie do np. C#, nie jest 100%owym jezykiem obiektowym. Pewne 'podstawowe' typy zmiennych sa wlasnie 'prymitywne', tzn. operujemy w kodzie bezposrednio na ich wartosciach, a nie na referencjach do nich. W Javie sa to: boolean, byte, char, short, int, long, float oraz double. Tablice typow prymitywnych to po prostu obiekty zawierajace w sobie zmienne okreslonego typu prymitywnego, np. jako int[] oznaczamy tablice liczb calkowitych, w ktora mozemy wsadzic ile nam sie podoba int'ow (zaleznie od tego, jak ja zainicjalizujemy). Piszac int[] arr = new int[10]; instancjonujemy w Javie tablice 10 int'ow, a zeby np. ustawic wartosc ktoregos (w tym wypadku 4tego) z nich, piszemy: arr[3] = 15; Po co sa? Chyba po to, zeby cokolwiek mozna bylo zrobic w Javie ;) Prymitywy sluza np. jako liczniki w petlach, flagi (boolean) itp., z nich rowniez budujemy bardziej zlozone klasy. Tablice (niekoniecznie prymitywow) sa np. podstawa dzialania wielu bardziej zaawansowanych kolekcji, czy struktur danych w Javie.
Po wiecej informacji zaprszam np. na http://java.sun.com/docs/books/tutorial/
Kordzik napisał(a)
Java tak naprawde, w przeciwienstwie do np. C#, nie jest 100%owym jezykiem obiektowym.
C# też zawiera typy przekazywane jedynie przez wartość. Do tych typów należą również string i całe struktury.
Owszem (choc co do stringa to mam watpliwosci, ale nie spieram sie - zaden ze mnie ekspert od c# ;) ), sa chyba nawet specjalne slowka kluczowe w c# do przekazywania parametrow metodzie przez referencje / wartosc. Ale nie zmienia to faktu, ze wszystkie dane, na ktorych operuje sie w c# to obiekty. Rowniez string (czyli System.String) i kazdy struct. Dziedzicza one po klasie Object, moga implementowac interfejsy, posiadają metody - to jest fundamentalna roznica w stosunku do np. int'a w Javie, ktory jest po prostu 32-bajtowym 'klockiem' w pamieci.
To, że int posiada metody nie oznacza, że nie jest "po prostu 32-bajtowym 'klockiem' w pamieci" ;). int'a bez tzw boxing'u nie zamienisz w object. W każdym razie string jest taki pół na pół, natomiast struktury oraz typy całkowite i zmiennoprzecinkowe przekazywane są przez wartość. Leżą na stosie, albo w pamięci const. Owszem, mają dość spore cechy obiektów, jednak są pewne fundamentalne różnice między prawdziwymi obiektami. Są to tzw. Value Types.
No wlasnie ja myslalem zawsze ze u Was int'y, boolean'y itd. to tylko aliasy do obiektów (czy struktur - w kazdym razie czegos wiekszego niz 32 bajty w pamieci :) ) i ze nie ma dzieki temu calego tego boxing'owego zamieszania, z ktorym borykamy sie w Javie. Ale tak jak mowie - moja wiedza o c# jest ograniczona, wiec nie mam podstaw do prowadzenia konstruktywnej polemiki w tym temacie ;)
Nie wiem co robię w tym dziale, ale co tam...
Hmm... int to 32 bajty?? Mnie wszędzie uczyli że ma on 4 bajty, jeżeli jest skalarem (brzmi ładniej niż prymityw) i jest kompilowany w 32-bit kompilatorze...
haha Kordzik stary chlorze ale cie teraz zalamal koles nade mna!
pozdro
No tak bity i bajty, nigdy sie tego nie naucze ;> Ale czy zawsze i wszedzie ma on 32 bity to bym sie nie zakladal. Wiem ze tyle w Javie
Na wszystkich 32-bit platformach (języki interpretowane i kompilowane do kodu pośredniego) lub na 32-bit kompilatorze (kompilowane bezpośrednio do kodu maszynowego), i musi być typem prostym.
Na 64 bitowych platformach int to też 32 bity ;)
Ale to zależy od kompilatora, może ktoś kto zrobi kompilator ustawić int jako 64 bity. Ja jeszcze gdzieś mam 16-bit kompilatory, a tam int to 16 bitów, więc to co napisałem jest prawdziwe. A zresztą, NIE pisałem że TYLKO na 32-bit int(eger) ma 32 bity...
16 bit kompilator do C#, ciekawe :)
int ma zawsze 32 bity
A jak stworze wlasny jezyk i napisze do niego maszyne wirtualna i kompilator i pod nazwa int zdefiniuje w nim 64bitowa liczbe zmiennoprzecinkowa? ;)
Temat jest o Javie który zszedł porównawczo do C#. I tak poleciałem lekko off-topem, ale ty manfredek to już po całości jeśli masz na myśli dowolny język ;)
heh, chyba, że masz na myśli własnego C# z napisanym własnym kompilatorem ;) :D
Ja tam tylko wytknąłem błąd, poza tym najchętniej to nawet bym nie wchodził do tego działu, tak samo jak bawił się Brudnopisem...