První parametr metody putChar je adresa, ne index do pole: public native void putChar(long address, char x);
Z. -- Zdenek Tronicek FIT CTU in Prague Oto Buchta napsal(a): > Samozrejme ze to neni ukazatelova aritmetika. Z pohledu jazyka je to > aritmetika celociselna. > A index v poli IMHO neni ukazatel. > > Semanticky totez by se dalo jednoduse naprogramovat nad polem, vzdyt > ArrayList je de facto totez. > > A jeste jedna perlicka na zaver: predstavte si JVM naimplementovane nad > turingovym strojem a nebo, coz bude jasnejsi, pomoci > konecneho automatu. Nebo cehokoli jineho, co neni naimplementovano dle von > Neumanna. A udelat to samozrejme lze. Proto je take Unsafe v sun.misc . > > Dne 4. března 2011 19:01 "Zdeněk Troníček" <[email protected]> > napsal(a): > >> Nerad bych tady vyvolal nějakou flame war, ale ukazatelová aritmetika to >> podle mého názoru je. Např. v metodě writeToMem je p ukazatel (obsahuje >> adresu) a k tomuto ukazateli se přičítá 2, tj. sečte se ukazatel a int a >> výsledkem je ukazatel: >> >> static void writeToMem(Unsafe u, long p, byte[] values) { >> for (byte b : values) { >> u.putChar(p, (char) b); >> p += 2; >> } >> } >> >> Jinak celý článek byl napsán spíš jako vtip, než že by chtěl popisovat >> nějakou neznámou vlastnost Javy. >> >> Z. >> -- >> Zdenek Tronicek >> FIT CTU in Prague >> >> >> Martin Kuba napsal(a): >> > Dne 4.3.2011 13:56, [email protected] napsal(a): >> >> Jen bych doplnil, takovou libustku, ktera ukazuje, ze i Java ma >> >> ukazatelovou aritmetiku. >> >> >> >> http://www.java.cz/article/ukazatelovaaritmetika >> >> >> >> Ale je to opravdu jen takova zajimavost. >> > >> > To není ukazatelová aritmetika. To jenom ukazuje, >> > že pomocí nativních metod se dá přistupovat k paměti přímo, >> > ale to je tím, že ty nativní metody jsou napsané v Céčku. >> > >> > Definice té metody Unsafe.putChar() totiž vypadá takto: >> > >> > public native void putChar(long address, char x); >> > >> > >> > Stejně tak můžu pomocí nativní metody přistupovat >> > k nějaké speciální vlastnosti nějakého operačního systému, třeba >> > sdílené paměti mezi procesy nebo k nastavování práv na unixovém >> > filesystému, ale tím se to nestává součástí Javy jakožto jazyka. >> > >> > Makub >> > -- >> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> > Supercomputing Center Brno Martin Kuba >> > Institute of Computer Science email: [email protected] >> > Masaryk University http://www.ics.muni.cz/~makub/ >> > Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 >> > -------------------------------------------------------------- >> > >> > >> >> > > > -- > Oto 'tapik' Buchta, [email protected], http://tapikuv.blogspot.com >
