JAVA kód - Ez pontosan mit jelent?

Fórumok

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

Hozzászólások

private byte[] getBufIfOpen() throws IOException

(0 java tudással, 1 google kereséssel)

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 getBufIfOpen által visszaadott byte tömb pos sorszámú elemét logikai ÉSeli (bitwise and) a hexa FF-el.

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();
	}
}

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.