Zer autoboxing da eta Java Unboxing?

Autoboxing & unboxing

Autoboxing & Unboxing

Orokorra: Artikulu honetan autoboxing buruz eztabaidatu dugu / Unboxing java ezaugarri. Autoboxing eta Unboxing da, funtsean, ezaugarri bat primitibo datu motak bihurtzeko Objects eta alderantzizko den. Prozesu guztia automatikoki egiten java exekutatu denbora ingurumena arabera. Baina kontuz hartu behar dira ezaugarri hau ezartzeko bestela efektua aplikazio performance izango du.

Sarrera
Aurretik JDK den 1.5, Ez zen erraza primitibo datu motak bihurtzeko adibidez int, char, float, bere objektu baliokidea sartu bikoiztu - Integer, Character, Higikorra, Bikoitza. JDK 5 primitibo datu moten bihurketa automatikoaren ezaugarri batera iritsi zen bere objektu baliokidea sartu. Ezaugarri hau da autoboxing bezala ezagutzen. hau kontrakoa da Unboxing bezala ezagutzen. adib. objektu bihurtzeko primitibo datu motak dagokiolarik prozesuan dago Unboxing izeneko. Sample bai autoboxing eta Unboxing kodea pean bezala erakutsiko da -

Autoboxing

[kodea]

Integer integer = 9;

[/kodea]

Unboxing

[kodea]

= In int 0;

in = Integer berria(9);

[/kodea]

Noiz Autoboxing eta Unboxing erabiltzen da?

Autoboxing da java baldintza hauetan konpilatzailea aplikatutako -

  • Noiz primitibo balio bat metodo bat Parametro batek dagokion wrapper klaseko objektu bat espero gisa pasatu da.
  • Noiz primitibo balio bat da dagokion wrapper class aldagai bat esleitzen.

Demagun honako adibidea -

Listing1: Sample kodea Autoboxing erakusten

[kodea]

int sumEvenNumbers publikoa(zerrenda<Integer> intList ) { int sum = 0; for (Integer i: intList ) bada ( i % 2 == 0 ) batura = i; return sum;}

[/kodea]

Aurretik JDK 1.5, Goiko kode konpilazio errorea emaitza zukeen gainerako operadorea geroztik - '%' eta unario plus - ' =' Ezin izan da Osoen gainean aplikatzen. Baina JDK geroztik 1.5 Kode zati honetan biltzen eta exekutatzen error gabe Integer bat exekuzio int bihurtzen baititu.

Unboxing da java konpiladorea aplikatutako baldintza hauetan -

  • Objektu bat bertan dagokion primitibo balio bat espero metodo bat parametro bezala pasa da.
  • Objektu bat da dagokion primitibo motako aldagai bat esleitzen
  • Demagun honako adibidea -

Listing2: Sample kodea Unboxing erakusten

[kodea]

import java.util.ArrayList;import java.util.List; public class UnboxingCheck { public static void main(Katea[] argumentuak) { in = Integer new Integer(-8); // 1. Unboxing through method invocation int absVal = absoluteValue( in ); System.out.println( “balio absolutua ” + in + ” = ” + absVal ); zerrenda<Bikoitza> = doubleList ArrayList berria<Bikoitza>(); // It is autoboxed through method invocation. doubleList.add(3.1416); // 2. Unboxing through assignment double phi = doubleList.get(0); System.out.println( “phi = ” + phi ); } public static int absoluteValue( int i ) { return (i < 0) ? -i : i; }}

[/kodea]

Autoboxing eta Unboxing sustatzailearen kodea idatzi zein da erraza irakurtzeko eta ulertzeko aukera ematen. Ondorengo taulan, aintzinako datatypes eta dagozkien wrapper objektuak erakusten ditu -

Primitive Mota Wrapper Class
boolean Boolean
byte Byte
char Character
float Higikorra
int Integer
luze Long
laburrak Short

Mahaia - 1: Primitive data type and their equivalent wrapper classes With Comparison operators

Autoboxing eta Unboxing izango alderatuz operadoreak egin daiteke. Jarraian kode ilustratzen nola egin daiteke -

Listing3: Sample kodea Autoboxing erakutsiz ere eragileak erabiliz Unboxing

[kodea]

Klase publiko BoxedComparator {

public static void main(Katea[] argumentuak) {

in = Integer new Integer(25);

bada (in < 35)

System.out.println(“int balioa = ” + in);

}

}

[/kodea]
Autoboxing eta metodoa gainkarga batekin Unboxing

Autoboxing edo Unboxing metodoa gainkarga kasuan egiten da. Hau oinarritutako honako arau hauek gertatzen -

  • Zabaltzea beats boxeo - Bada, ez da egoera bat, zabalketa eta boxeo artean aukeratu, zabalketa hobespen hartzen -

Listing4: Sample kodea gainkarga hobespenagatik

[kodea]

Klase publiko WideBoxed { Klase publiko WideBoxed { static void methodWide(int i) { System.out.println(“int”); } static void methodWide( Integer i ) { System.out.println(“Integer”); } public static void main(Katea[] argumentuak) { short shVal = 25; methodWide(shVal); } }}

[/kodea]

Programa honen irteera da - int

  • Zabaltzea erritmoak Varargs - Bada, ez da egoera bat, zabalketa eta varargs artean aukeratu, zabalketa hobespen hartzen -

Listing5: Sample kodea gainkarga hobespenagatik

[kodea]

Klase publiko WideVarArgs {

static void methodWideVar(int i1, int i2) {

System.out.println(“int int”);

}

static void methodWideVar(Integer… i) {

System.out.println(“ZENBAKIEN”);

} public static void main( Katea[] argumentuak) {

labur shVal1 = 25;

labur shVal2 = 35;

methodWideVar( shVal1, shVal2);

}

}

[/kodea]

  • Boxing erritmoak Varargs - Bada, ez da egoera bat boxeoa eta varargs artean aukeratu, boxeo hobespen hartzen -

Listing6: Sample kodea gainkarga hobespenagatik

[kodea]

Klase publiko BoxVarargs {

static void methodBoxVar(in Integer) {

System.out.println(“Integer”);

}

static void methodBoxVar(Integer… i) {

System.out.println(“ZENBAKIEN”);

}

public static void main(Katea[] argumentuak) {

int intVal1 = 25;

methodBoxVar(intVal1);

}

}

[/kodea]

Zer gogoratu ordena Autoboxing erabili -

ezagutzen dugun Ezaugarri ona bakoitza desabantaila batzuk dator bezala, Autoboxing ez da zentzu horretan salbuespen bat. balak garrantzitsu batzuk bertan developer bat kontuan hartu behar Ezaugarri hau erabiliz, berriz, azpian bezala dira -

  • berdintasuna operadoreak - - berdintasuna operadorea dituzten objektuak alderatzea '==' nahasteak izaten bai datuak primitibo mota eta objektuari aplikatu ahal bezain. Noiz operadorea da objektuak gainean aplikatzen, benetan objektuak erreferentzia eta ez balioekin konparatzen.

Listing7: Sample kodea alderatuz erakusten

[kodea]

Klase publiko Comparator {

public static void main(Katea[] argumentuak) {

Instinct Integer = new Integer(1);

Integer secondInt = new Integer(1);

bada (== Sena secondInt) {

System.out.println(“biak bat berdinak dira”);

} bestela {

System.out.println(“Biak bat ez dira berdinak”);

}

}

}

[/kodea]

  • objektu eta berdintasun eta harreman-operadorea primitibo nahastea - Datu mota primitibo bat alderatu dugu objektu bat bada, gero Unboxing gertatzen bertan NullPointerException bat bota daiteke objektuaren null bada.
  • Cached Object - valueOf geroztik()Metodo boxed primitibo objektuak sortzeko erabiltzen da, erabilitako objektuak cached dira. Geroztik java katxeatzen batetik zenbaki oso batez -128 to 128, cached objektu horiek desberdinak izan daitezke.
  • Performance degradazioa - Autoboxing edo Unboxing aplikazio baten errendimendua degradatzen nahigabeko objektu bat bertan GC sarriago exekutatu eramaten sortzen da.

Autoboxing desabantaila

Nahiz autoboxing abantaila asko ematen ditu, Hurrengo desabantaila ditu -

  • autoboxing bat amaitzen da alferrikako objektu lortzen sortu barruan gertatzen bada eta geldotu dezake aplikazioaren errendimendua. Demagun ondoko kodea -

Listing8: Sample kodea performance alea erakusten

[kodea]

int sumEvenNumbers publikoa(zerrenda<Integer> intList) { int sum = 0; for (Integer i: intList) bada ( i % 2 == 0 ) batura = i; return sum;}

[/kodea]

Kode zati honetan, [kodea] batura = i; [/kodea] bezala zabaldu egingo [kodea] batura = batura + i; [/kodea]. Geroztik ' ' eragiketa ezin da Integer objektuaren gainean egindako, JVM baturaren Integer Object Unboxing abiarazle eta gero emaitza itzuli autoboxed da.

  • Aurretik JDK 1.5, Datu mota int eta Integer desberdin ziren eta metodo bi mota horiek gainkarga kasuan hassle gabe erabiltzen ziren. Orain autoboxing eta Unboxing batera, hori zailagoa bihurtu. Horren adibide bat gainkarga remove ArrayList en metodoa da. Class ArrayList bi remove metodoak ditu - kendu (indizea) eta kendu (objektu). In this case, Metodo gainkarga ez zen gertatu eta dagozkien metodo parametro egokiekin izeneko izango da.

Ondorioa

Autoboxing mekanismoa datu mota primitibo bat, hurrenez hurren, wrapper edo Object sartu ezkutuko da. Compiler erabiltzen valueOf() metodo primitibo bihurtzeko Xedea eta intValue egunero(), doubleValue() etab Objektu batetik primitibo balioa lortzeko. autoboxing In, boolearrentzat da Boolean bihurtutako, Byte byte, Character char, float changes to Float, int Integer doa, luze Short den luzeak eta laburrak bihurtzen doa, birmoldaketaren Unboxing alderantzizko norabidean bitartean gertatzen.

Tagged on: , ,
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share