Autoboxing thiab unboxing nyob Java yog dab tsi?

Autoboxing & unboxing

Autoboxing & unboxing

Txheej txheem cej luam: Nyob rau cov tshooj no peb yuav tham txog lub autoboxing / unboxing feature ntawm java. Autoboxing thiab unboxing yog cov ib feature yuav hloov ua lwm yam ntaub ntawv txheej thaum ub hom khoom thiab nraud yeej. Txoj kev no ua tau los ntawm java khiav ib puag ncig lub sij hawm. Tab sis, tus saib xyuas yuav tsum tau muab thaum siv lub tswv yim no feature txwv tsis pub nws puas ntxim rau kev kawm ntawv.

Taw qhia
Ua ntej JDK 1.5, yog tsis yooj yim rau koj siv tau cov ntaub ntawv txheej thaum ub hom e.g rau cov menyuam, char, ntab, coj mus ua lawv kwv tshaj – Integer, Cim, Ntab, Muab ob npaug rau. JDK 5 tuaj nrog tus feature ntawm conversion rho ntawm hom ntaub ntawv txheej thaum ub rau lawv kwv tshaj. No feature yog hu ua autoboxing. Tus nraud ntawm qhov no yog hu ua unboxing. i.e. txoj converting khoom rau hauv cov ntaub ntawv txheej thaum ub coj hom hu ua unboxing. Coj kev cai rau cov autoboxing thiab unboxing no yog muaj li qis –

Autoboxing

[chaws]

Integer integer = 9;

[/chaws]

unboxing

[chaws]

rau cov menyuam nyob rau hauv = 0;

= Integer tshiab ua(9);

[/chaws]

Thaum Autoboxing thiab unboxing yog siv?

Autoboxing yog muaj ntaub ntawv java compiler nyob rau xuaj-

  • Thaum twg muaj nqis txheej thaum ub yog tau raws li ib tug parameter mus ib txoj kev uas expects ib yam twj paj nruas hauv cov hoob kawm wrapper coj.
  • Thaum twg muaj nqis txheej thaum ub yog muab ib tug kuj sib txawv thiab cov hoob kawm wrapper txhua tus coj.

Saib qhov piv txwv hauv qab no –

Listing1: Coj cai uas qhia Autoboxing

[chaws]

sumEvenNumbers rau cov pej xeem menyuam(Sau<Integer> intList ) { rau cov menyuam zaum = 0; rau (Integer kuv: intList ) Yog hais tias ( Kuv % 2 == 0 ) zaum = kuv; rov qab mus zaum;}

[/chaws]

Ua ntej jdk 1.5, qhov chaws snippet saum toj no yuav tau ua yuam kev muab tso ua ke vim qhov uas neeg teb xov tooj – '%' thiab tus unary plus – ' =' yuav tsis muaj ntaub ntawv los ntawm cov zauv. Tiam sis txij li jdk 1.5 chaws no daim compiles thiab sau tsis tau tej kev ua yuam kev li nws converts ib Integer mus rau cov menyuam nyob runtime.

Unboxing yog muaj ntaub ntawv java compiler nyob rau xuaj-

  • Thaum twg ib yam twj paj nruas yog tau raws li ib tug parameter mus ib txoj kev uas expects txheej thaum ub cov nqi coj.
  • Thaum twg ib yam twj paj nruas yog muab ib tug kuj sib txawv thiab qhov txheej thaum ub coj yam
  • Saib qhov piv txwv hauv qab no –

Listing2: Coj cai uas qhia Unboxing

[chaws]

ntshuam java.util.ArrayList;ntshuam java.util.List; tsev kawm UnboxingCheck { pej xeem tsis muaj dabtsis loj zoo li qub(Txoj hlua[] args) { Integer hauv = Integer tshiab(-8); // 1. Unboxing los ntawm txoj kev invocation rau cov menyuam absVal = absoluteValue( nyob rau hauv ); System.out.println( “qho nqi ntawm ” + nyob rau hauv + ” = ” + absVal ); Sau<Muab ob npaug rau> doubleList = ArrayList tshiab<Muab ob npaug rau>(); // Nws yog autoboxed los ntawm txoj kev invocation. doubleList.add(3.1416); // 2. Unboxing los ntawm ntus coj Officer = doubleList.get(0); System.out.println( “Officer = ” + saib ); } pej xeem zoo li qub rau cov menyuam absoluteValue( rau cov menyuam kuv ) { rov qab mus (Kuv < 0) ? -Kuv : Kuv; }}

[/chaws]

Autoboxing thiab unboxing cia tus tsim tawm los sau uas yooj yim nyeem thiab to taub txog txoj. Cov lus hauv qab no qhia tau hais tias cov datatypes txheej thaum ub lawv coj wrapper khoom thiab –

Yam txheej thaum ub Hoob kawm wrapper
boolean Boolean
byte Byte
char Cim
ntab Ntab
rau cov menyuam Integer
ntev Ntev
tsis ntev Tsis ntev

Cov lus- 1: Cov hom ntaub ntawv txheej thaum ub thiab lawv tshaj wrapper kawm uas sib piv tswv

Autoboxing thiab unboxing yuav ua tau mob sib piv tswv. Cov cai hauv qab no snippet illustrates cas nws yuav ua tau-

Listing3: Coj kev cai uas qhia Autoboxing thiab cov unboxing siv sib piv tswv

[chaws]

tsev kawm BoxedComparator {

pej xeem tsis muaj dabtsis loj zoo li qub(Txoj hlua[] args) {

Integer hauv = Integer tshiab(25);

Yog hais tias (nyob rau hauv < 35)

System.out.println(“Tus nqi rau cov menyuam = ” + nyob rau hauv);

}

}

[/chaws]
Autoboxing thiab unboxing nrog rau txoj kev overloading

Autoboxing los yog unboxing yuav ua nyob rau hauv rooj plaub ntawm txoj kev overloading. Thaum muaj li no based rau cov cai hauv qab no –

  • Neeg ntaus boxing widening -Yog muaj ib lub caijnyoog twg xaiv widening thiab boxing, widening xum – yuav siv sij hawm

Listing4: Coj cai qhia overloading nyiam

[chaws]

tsev kawm WideBoxed { tsev kawm WideBoxed { zoo li qub tsis muaj dabtsis methodWide(rau cov menyuam kuv) { System.out.println(“rau cov menyuam”); } zoo li qub tsis muaj dabtsis methodWide( Integer kuv ) { System.out.println(“Integer”); } pej xeem tsis muaj dabtsis loj zoo li qub(Txoj hlua[] args) { luv shVal = 25; methodWide(shVal); } }}

[/chaws]

Cov kev pab cuam no tso zis yog – rau cov menyuam

  • Neeg ntaus Varargs widening -Yog muaj ib lub caijnyoog twg xaiv widening thiab varargs, widening xum – yuav siv sij hawm

Listing5: Coj cai qhia overloading nyiam

[chaws]

tsev kawm WideVarArgs {

zoo li qub tsis muaj dabtsis methodWideVar(rau cov menyuam i1, rau cov menyuam i2) {

System.out.println(“rau cov menyuam rau cov menyuam”);

}

zoo li qub tsis muaj dabtsis methodWideVar(Integer… Kuv) {

System.out.println(“Zauv”);

} pej xeem tsis muaj dabtsis loj zoo li qub( Txoj hlua[] args) {

luv shVal1 = 25;

luv shVal2 = 35;

methodWideVar( shVal1, shVal2);

}

}

[/chaws]

  • Boxing neeg ntaus Varargs -Yog muaj ib lub caijnyoog twg xaiv boxing thiab varargs, boxing yuav siv lub xum –

Listing6: Coj cai qhia overloading nyiam

[chaws]

tsev kawm BoxVarargs {

zoo li qub tsis muaj dabtsis methodBoxVar(Integer hauv) {

System.out.println(“Integer”);

}

zoo li qub tsis muaj dabtsis methodBoxVar(Integer… Kuv) {

System.out.println(“Zauv”);

}

pej xeem tsis muaj dabtsis loj zoo li qub(Txoj hlua[] args) {

rau cov menyuam intVal1 = 25;

methodBoxVar(intVal1);

}

}

[/chaws]

Tej yam uas yuav tsum nco ntsoov kom siv Autoboxing-

Raws li peb paub tias txhua feature zoo los nrog rau tej drawbacks, Autoboxing tsi muaj kev zam hauv no regard. Ib co cia nyias qhov tseem ceeb uas tsim tawm ib tug yuav tsum nco ntsoov thaum no feature yog li tsis –

  • Muab piv rau qhov khoom nrog kev koob pheej ntawm lawv – lub koob pheej ntawm lawv neeg teb xov tooj – tswv '==' ua rau yus tsis meej pem li nws yuav tsum muaj ntaub ntawv rau hom ntaub ntawv txheej thaum ub thiab lub nruas. Thaum twg tus neeg teb xov tooj yog ntaub ntawv los ntawm cov khoom, nws yeej pev cov kev siv cov khoom thiab tsis lub qhov tseem ceeb.

Listing7: Coj cai qhia sib piv

[chaws]

tsev kawm Comparator {

pej xeem tsis muaj dabtsis loj zoo li qub(Txoj hlua[] args) {

Integer istInt = Integer tshiab(1);

Integer secondInt = Integer tshiab(1);

Yog hais tias (istInt == secondInt) {

System.out.println(“ob yam ib yog muaj sib npaug”);

} ntxiv {

System.out.println(“Leej ib tug yeej tsis sib npaug”);

}

}

}

[/chaws]

  • Nws kwv thiab txheej thaum ub koob pheej ntawm lawv thiab tus tswv paub – yog ib yam ntaub ntawv txheej thaum ub muaj ib yam twj paj nruas piv peb, ces tus unboxing no uas yuav muab ib tus NullPointerException yog tus tsav haus dejcawv thov.
  • Kwv cached – txij lub valueOf()txoj kev siv los ua khoom boxed txheej thaum ub, cov khoom siv no cached. Vim java caches zauv positive los ntawm -128 mus 128, cov khoom cached kuj coj txawv ib tug.
  • Kev kawm degradation-Autoboxing los yog unboxing degrades ntawv uas thov kom nws ua ib qho kev pliaj twj paj nruas uas ua rau yus lub GC khiav feem ntau.

Disadvantage ntawm Autoboxing

Tab sis yog autoboxing muaj ntau zoo, nws muaj lub disadvantage hauv qab no –

  • Autoboxing muaj li nyob rau hauv lub voj ruaj khoom twg thiaj li raug tsim thiab nws yuav ua rau kom cia rau hauv daim ntawv thov ntawv. Xav txog cov cai hauv qab no –

Listing8: Coj cai qhia ntawv qhov teeb meem

[chaws]

sumEvenNumbers rau cov pej xeem menyuam(Sau<Integer> intList) { rau cov menyuam zaum = 0; rau (Integer kuv: intList) Yog hais tias ( Kuv % 2 == 0 ) zaum = kuv; rov qab mus zaum;}

[/chaws]

Nyob rau daim cai no, [chaws] zaum = kuv; [/chaws] yuav nthuav li [chaws] zaum = zaum + Kuv; [/chaws]. Vim lub sijhawm ua haujlwm ' ' tsis yuav ua rau paj nruas Integer, cov JVM ua tus unboxing uas zaum Integer nruas thiab ces cov no autoboxed rov.

  • Ua ntej jdk 1.5, cov ntaub ntawv yam rau cov menyuam thiab Integer tau cov thiab thaum txoj kev overloading no ob hom tau siv yog tias tsis muaj hassle. Tam sim no nrog autoboxing thiab unboxing, qhov no kuj yog trickier. Ib qho piv txwv ntawm no yog cov overloaded tshem txoj kev nyob rau hauv ArrayList. Hoob ArrayList muaj ob tug tshem txoj kev – tshem (Performance Index) thiab hle lawv tawm (nruas). Qhov no, txoj kev overloading yuav tsis tshwm sim thiab tus qauv duas paub yuav muab hu uas tsis tsim nyog.

Xaus

Autoboxing yog tus mechanism rau covert ib yam ntaub ntawv txheej thaum ub rau duas paub wrapper los sis tej yam twj paj nruas. Compiler siv valueOf() txoj kev yuav hloov txheej thaum ub rau paj nruas thiab siv intValue(), doubleValue() thiab lwm yam tau txheej thaum ub tus nqi ntawm lub nruas. Nyob rau hauv autoboxing, tus boolean yuav txia mus Boolean, byte los Byte, char los mus ua cim, kev hloov ntab ntab, rau cov menyuam mus rau Integer, ntev mus kom ntev thiab short converts kom luv luv, thaum nyob rau hauv unboxing lub conversion zoo li nyob rau hauv cov kev taw qhia thim rov qab.

============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share