Sziasztok, a java.io.BufferedInputStream OpenJdk-s kódjában a 258. sorban van egy érdekes utasítás:
public ... int fuggveny(){
...
return getBufIfOpen()[pos++] & 0xff;
}
Mit jelent egy ilyen return mögötti rész? Itt mi történik pontosan? a getBufIfOpen-nek nem paramétert ad át, hanem micsodát? Mi az a tömbszerű pos++ a függvény neve után?
Köszönöm, dio
- 1991 megtekintés
Hozzászólások
private byte[] getBufIfOpen() throws IOException
(0 java tudással, 1 google kereséssel)
- A hozzászóláshoz be kell jelentkezni
Szia, azt szerettem volna megérteni hogy itt a függvény hívásakor láthatólag nem paraméter amit átad - de akkor micsoda?
Elhiszem hogy tuti amit találtál a keresőben, de akkor most mi is az a függvénynév()[pos++]-nál a [pos++]? hogy hívod, mi a neve a nyelvben?
- A hozzászóláshoz be kell jelentkezni
Nem ad át semmit. A visszatérő byte[]-tömbnek a
pos
-adik elemét fogja bitenként éselni 0xff-fel. Semmi meglepő nincs ezen, a C-like nyelvek így működnek
Nesze, C-ben is működik:
#include <stdio.h>
#include <malloc.h>
char* f() {
char* ch = (char*)malloc(sizeof(char)*10);
ch[1] = 'a';
return ch;
}
int main() {
printf("%c\n", f()[1] & 0xff);
return 0;
}
Szerk: Ofkoz ez a kód így helytelen, de azt már rádbízom, miért :)
- A hozzászóláshoz be kell jelentkezni
A "pos++" kiértékeli a kifejezést a "pos" aktuális értékével és ezután megnöveli "pos" értékét 1-el.
- A hozzászóláshoz be kell jelentkezni
A getBufIfOpen által visszaadott byte tömb pos sorszámú elemét logikai ÉSeli (bitwise and) a hexa FF-el.
- A hozzászóláshoz be kell jelentkezni
Köszönöm megértettem. :-)
dio
- A hozzászóláshoz be kell jelentkezni
Ezzel a kis demóval tanulmányozhatod a prefix és postfix operátorok viselkedését:
public class ArithmeticOperatorsDemo {
public ArithmeticOperatorsDemo() {
int x, y = 10, z = 5;
x = y++;
System.out.println("Postfix ++ operator resulted in " + x);
x = ++z;
System.out.println("Prefix ++ operator resulted in " + x);
x = --y + z++;
System.out.println("--y + z++ " + x);
}
public static void main(String args[]) {
new ArithmeticOperatorsDemo();
}
}
- A hozzászóláshoz be kell jelentkezni
Mármint logikai ÉS helyett bitenként ÉSeli (bitwise and).
- A hozzászóláshoz be kell jelentkezni
Még valami a kód megértéséhez:
az "& 0xff" tulajdonképpen csak rondán megfogalmazott - de mivel java lib.ben van valószínűleg gyors - implicit byte->int típuskonverzió kikényszerítése.
- A hozzászóláshoz be kell jelentkezni
javaban a byte (is) signed típus, az "& 0xff" az előjelet "tünteti el" (-1 -> 255)
- A hozzászóláshoz be kell jelentkezni
úúú... ez mennyiszer jól jött volna...
Danke schön!
- A hozzászóláshoz be kell jelentkezni