Ինչ է autoboxing եւ Ապափաթեթավորում է Java?

Autoboxing & unboxing

Autoboxing & Ապափաթեթավորում

Overview: Այս հոդվածում մենք կքննարկենք մասին autoboxing / Ապափաթեթավորում առանձնահատկությունն java. Autoboxing եւ Ապափաթեթավորում հիմնականում մի առանձնահատկություն է փոխարկել պարզունակ տիպեր օբյեկտների եւ հակադարձ. Ամբողջ գործընթացը կատարվում է ավտոմատ կերպով է java վազում ժամանակի միջավայրում. Բայց խնամք պետք է ձեռնարկվեն, իսկ իրականացման հնարավորությունը, հակառակ դեպքում դա պետք ազդեցություն դիմումի կատարման.

Ներածություն
Նախքան JDK 1.5, դա չի եղել հեշտ է փոխարկել պարզունակ տվյալների տեսակները, օր int, օրականով աշխատանք, float, կրկնապատկել են իրենց օբյեկտի համարժեքը - Ամբող թվերի, բնավորություն, բոց, Կրկնակի. JDK 5 եկավ առանձնահատկությունն ավտոմատ փոխակերպման նախնադարյան տիպերի մեջ իրենց օբյեկտ համարժեքը. Այս հատկությունը հայտնի է որպես autoboxing. Հակառակ այս հայտնի է որպես Ապափաթեթավորում. i.e. գործընթացը վերծանել օբյեկտների մեջ համապատասխան պարզունակ տվյալների տեսակները կոչվում Ապափաթեթավորում. Sample կոդը համար, այնպես էլ autoboxing եւ Ապափաթեթավորում է որպես տակ -

Autoboxing

[համար]

Ամբողջ թիվ ամբողջ թիվ = 9;

[/համար]

Ապափաթեթավորում

[համար]

int է = 0;

ի = նոր Integer(9);

[/համար]

Երբ Autoboxing եւ Ապափաթեթավորում օգտագործվում է?

Autoboxing կիրառվում է Java Կազմողի է հետեւյալ պայմաններով `

  • Երբ մի պարզունակ արժեքը անցել է որպես պարամետր է մեթոդի, որը ակնկալում է օբյեկտ համապատասխան wrapper դասի.
  • Երբ մի պարզունակ արժեքը, որը նշանակվում է մի փոփոխականի համապատասխան wrapper դասի.

Դիտարկենք հետեւյալ օրինակը.

Listing1: Sample կոդը ցույց Autoboxing

[համար]

հասարակական միջ sumEvenNumbers(Ցուցակ<ամբողջ թիվ> intList ) { int sum = 0; համար (ամբողջ թիվ i: intList ) եթե ( ես % 2 == 0 ) գումարը = i; return sum;}

[/համար]

Նախքան JDK 1.5, վերը նշված կոդը պատառներ կլիներ արդյունքում յուրացման սխալ, քանի որ մնացածն օպերատոր - '%', իսկ unary գումարած ' =' չի կարող կիրառվել է ամբողջ թվեր. Բայց քանի որ JDK 1.5 Այս կտոր կոդը կազմում եւ վարում է առանց որեւէ սխալի, քանի որ այն նորադարձների թիվ է int է Runtime.

Ապափաթեթավորում կիրառվում է Java Կազմողի է հետեւյալ պայմաններով `

  • Երբ օբյեկտ, որը ընդունվել է որպես պարամետր է մեթոդի, որը ակնկալում է համապատասխան պարզունակ արժեքը.
  • Երբ օբյեկտ, որը նշանակվում է փոփոխականի համապատասխան պարզունակ տեսակի
  • Դիտարկենք հետեւյալ օրինակը.

Listing2: Sample կոդը ցույց Ապափաթեթավորում

[համար]

ներմուծման java.util.ArrayList;ներմուծման java.util.List; public class UnboxingCheck { հասարակական ստատիկ անվավեր հիմնական(Լար[] args) { Ամբողջ թիվ է = նոր Integer(-8); // 1. Unboxing through method invocation int absVal = absoluteValue( in ); System.out.println( “բացարձակ արժեք ” + in + ” = ” + absVal ); Ցուցակ<Կրկնակի> doubleList = new ArrayList<Կրկնակի>(); // 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 (ես < 0) ? -ես : ես; }}

[/համար]

Autoboxing եւ Ապափաթեթավորում թույլ է տալիս մշակողի գրելու ծածկագիր, որը շատ հեշտ է կարդալ եւ հասկանալ,. Հետեւյալ աղյուսակը ցույց է տալիս պարզունակ datatypes եւ նրանց համապատասխան երես օբյեկտները -

պրիմիտիվ տեսակը փաթաթան Class
բուլյան Բուլյան
byte բայտ
օրականով աշխատանք բնավորություն
float բոց
int ամբողջ թիվ
երկար Երկար
կարճ կարճ

Սեղան - 1: Primitive data type and their equivalent wrapper classes With Comparison operators

Autoboxing եւ Ապափաթեթավորում կարող է կատարվել համեմատական ​​օպերատորների. Հետեւյալ կոդը պատառներ ցույց է տալիս, թե ինչպես դա կարող է անել,

Listing3: Sample կոդը ցույց Autoboxing եւ Ապափաթեթավորում օգտագործելով համեմատությունը օպերատորների

[համար]

հասարակական կարգի BoxedComparator {

հասարակական ստատիկ անվավեր հիմնական(Լար[] args) {

Ամբողջ թիվ է = նոր Integer(25);

եթե (in < 35)

System.out.println(“Արժեքը int = ” + in);

}

}

[/համար]
Autoboxing եւ Ապափաթեթավորում հետ եղանակով գերբեռնվածության

Autoboxing կամ Ապափաթեթավորում է արվում դեպքում մեթոդը գերբեռնվածության. Սա տեղի է ունենում հիմնված է հետեւյալ կանոնների

  • Ընդլայնման դիպչում բռնցքամարտ - Երբ կա մի իրավիճակ, ընտրել միջեւ ընդլայնման եւ բռնցքամարտում, լայնացում տանում է նախապատվությունը -

Listing4: Sample կոդը ցույց ծանրացնելու նախապատվությունը

[համար]

հասարակական կարգի WideBoxed { հասարակական կարգի WideBoxed { static void methodWide(int i) { System.out.println(“int”); } static void methodWide( ամբողջ թիվ i ) { System.out.println(“ամբողջ թիվ”); } հասարակական ստատիկ անվավեր հիմնական(Լար[] args) { short shVal = 25; methodWide(shVal); } }}

[/համար]

Ի արտադրանքը Այս ծրագրի է, int

  • Ընդլայնման դիպչում Varargs - Երբ կա մի իրավիճակ, ընտրել միջեւ ընդլայնման եւ varargs, լայնացում տանում է նախապատվությունը -

Listing5: Sample կոդը ցույց ծանրացնելու նախապատվությունը

[համար]

հասարակական կարգի WideVarArgs {

static void methodWideVar(int I1, int i2) {

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

}

static void methodWideVar(ամբողջ թիվ… ես) {

System.out.println(“ամբողջ թիվ”);

} հասարակական ստատիկ անվավեր հիմնական( Լար[] args) {

կարճ shVal1 = 25;

կարճ shVal2 = 35;

methodWideVar( shVal1, shVal2);

}

}

[/համար]

  • Բռնցքամարտի դիպչում Varargs - Երբ կա մի իրավիճակ, ընտրել միջեւ բռնցքամարտի եւ varargs, Բռնցքամարտի տանում է նախապատվությունը -

Listing6: Sample կոդը ցույց ծանրացնելու նախապատվությունը

[համար]

հասարակական կարգի BoxVarargs {

static void methodBoxVar(ամբողջ թիվ է) {

System.out.println(“ամբողջ թիվ”);

}

static void methodBoxVar(ամբողջ թիվ… ես) {

System.out.println(“ամբողջ թիվ”);

}

հասարակական ստատիկ անվավեր հիմնական(Լար[] args) {

int intVal1 = 25;

methodBoxVar(intVal1);

}

}

[/համար]

Things է հիշել, որպեսզի օգտագործել Autoboxing -

Քանի որ մենք գիտենք, որ ամէն բարի հատկությունը գալիս որոշ թերություններ, Autoboxing բացառություն չէ այս առումով. Որոշ կարեւոր փամփուշտ, որը ծրագրավորողը պետք է պահել մտքում, երբ, օգտագործելով այս առանձնահատկությունն են, քանի որ մինչեւ

  • Համեմատելով օբյեկտների հետ հավասարության օպերատոր - հավասարության օպերատոր '==' հանգեցնում է շփոթության, քանի որ այն կարող է կիրառվել երկու պարզունակ տիպերի եւ օբյեկտի. Երբ օպերատորը կիրառվում օբյեկտների, այն իրականում համեմատում է տեղեկանք օբյեկտների եւ ոչ այն արժեքները.

Listing7: Sample կոդը ցույց համեմատությունը

[համար]

հասարակական կարգի Comparator {

հասարակական ստատիկ անվավեր հիմնական(Լար[] args) {

Բնազդ Integer = new Integer(1);

Ամբողջ թիվ secondInt = new ամբողջ թիվ(1);

եթե (== Բնազդ secondInt) {

System.out.println(“երկուսն մեկը հավասար են”);

} else {

System.out.println(“Երկուսն էլ մեկը հավասար չեն”);

}

}

}

[/համար]

  • Mixing օբյեկտը եւ պարզունակ է հավասարության եւ հարաբերման օպերատոր - Եթե մենք համեմատենք մի պարզունակ տվյալների տեսակ առարկայի, ապա Ապափաթեթավորում տեղի է ունենում, որոնք կարող են շպրտել մի NullPointerException, եթե օբյեկտը ոլորտում..
  • Պահված որոնում - Քանի որ valueOf()մեթոդը օգտագործվում է ստեղծել boxed պարզունակ օբյեկտները, օգտագործված օբյեկտների վերցված են քեշից. Քանի որ Java caches թիվ են -128 to 128, այդ Պահված օբյեկտները կարող են վարվել այլ կերպ.
  • Performance դեգրադացիան - Autoboxing կամ Ապափաթեթավորում նվաստացնում կատարումը դիմումի, քանի որ այն ստեղծում է անցանկալի օբյեկտ, որը տանում է GC է առաջադրվել ավելի հաճախ.

Անբարենպաստ Autoboxing

Չնայած նրան, որ autoboxing ունի մի շարք առավելություններ, այն ունի հետեւյալ թերությունը -

  • Եթե ​​autoboxing տեղի է ունենում մի հանգույց ավելորդ օբյեկտների ստանում ստեղծվել, եւ դա կարող է դանդաղեցնել կատարումը դիմումի. Դիտարկենք հետեւյալ կոդը `

Listing8: Sample կոդը ցույց կատարման հարցը

[համար]

հասարակական միջ sumEvenNumbers(Ցուցակ<ամբողջ թիվ> intList) { int sum = 0; համար (ամբողջ թիվ i: intList) եթե ( ես % 2 == 0 ) գումարը = i; return sum;}

[/համար]

Այս կտոր օրենսգրքի, [համար] գումարը = i; [/համար] կընդլայնի է որպես [համար] գումարը = գումարը + ես; [/համար]. Քանի որ « գործողությունը չի կարող կատարվել է Integer օբյեկտի, որ JVM triggers է Ապափաթեթավորում գումարի Integer առարկաներ եւ ապա արդյունքը autoboxed ետ.

  • Նախքան JDK 1.5, տվյալների տեսակները int եւ Integer էին հստակ եւ դեպքում մեթոդի գերբեռնվածության այդ երկու տեսակի են օգտագործվել առանց hassle. Այժմ autoboxing եւ Ապափաթեթավորում, սա դարձել trickier. Որպես օրինակ է գերծանրաբեռնված հեռացնել մեթոդը ArrayList. Մանրամասն ArrayList ունի երկու հեռացնել մեթոդներ - հեռացնել (ինդեքս) եւ հեռացնել (object). In this case, մեթոդը ծանրաբեռնելը տեղի չի ունենա, իսկ համապատասխան մեթոդը կկոչվի համապատասխան պարամետրերի.

Ամփոփում

Autoboxing է մեխանիզմը քողարկված պարզունակ տվյալների տեսակի մեջ համապատասխան շապիկ կամ օբյեկտ. Կազմողի օգտագործում valueOf() մեթոդը է փոխարկել պարզունակ առարկել եւ օգտագործում intValue(), doubleValue() եւ այլն է ստանալ պարզունակ արժեք օբյեկտ. ի autoboxing, Բուլյան փոխարկվում է Բուլյան, բայթ է բայտ, char է Նիշերի, float changes to Float, int գնում է Integer, երկար գնում է երկար ու կարճ նորադարձների կարճ, իսկ Ապափաթեթավորում դարձի տեղի է ունենում հակառակ ուղղությամբ.

Tagged on: , ,
============================================= ============================================== Գնեք լավագույն տեխնոլոգիական գրքերը Amazon- ում,en,Էլեկտրականություն CT շագանակագույն էլեկտրաէներգիա,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share