Nə autoboxing və Java unboxing?

Autoboxing & unboxing

Autoboxing & unboxing

Baxış: Bu yazıda autoboxing haqqında müzakirə edəcək / Java unboxing xüsusiyyət. Autoboxing və unboxing əsasən obyektləri və tərs ibtidai data növləri çevirmək bir xüsusiyyət. bütün prosesi java run vaxt ətraf mühit avtomatik olaraq edilir. Amma qayğı bu xüsusiyyət həyata keçirərkən, əks halda proqram performans təsir edəcək alınmalıdır.

Giriş
Prior JDK üçün 1.5, Bu primitiv məlumat növləri çevirmək asan deyildi e.g int, kömürləşdirmək, float, Onların object ekvivalent daxil ikiqat - tam, Character, sal, ikiqat. JDK 5 Onların object ekvivalent dilinə ibtidai data növləri avtomatik dönüşüm xüsusiyyət ilə gəldi. Bu xüsusiyyət autoboxing kimi tanınır. Bu arxa unboxing kimi tanınır. İ.E. ibtidai data növləri müvafiq obyektlərin konvertasiya prosesi unboxing adlanır. autoboxing və Unboxing üçün Sample kodu altında göstərilir -

Autoboxing

[kod]

Tam tam = 9;

[/kod]

unboxing

[kod]

=-da int 0;

in = yeni tam(9);

[/kod]

Autoboxing və unboxing istifadə edildikdə?

Autoboxing aşağıdakı şərtlər Java compiler ilə tətbiq edilir -

  • primitiv dəyəri müvafiq banderol sinif bir obyekt gözləyir metodu bir parametri kimi qəbul zaman.
  • primitiv dəyəri müvafiq banderol sinif dəyişən təyin zaman.

Aşağıdakı misal düşünün -

Listing1: Autoboxing göstərən Sample kodu

[kod]

public int sumEvenNumbers(siyahı<Tam> intList ) { int sum = 0; uğrunda (tam i: intList ) əgər ( mən % 2 == 0 ) məbləğ = i; return sum;}

[/kod]

JDK əvvəl 1.5, '%' Və unary plus - - '= ' Integers tətbiq edilə bilməz qalan operator-ci ildən yuxarıda kodu parçasını yığma səhv nəticəsində olardı. Amma JDK-ci ildən 1.5 Bu uzunluğu int üçün tam çevirir kimi kodu bu parça hər hansı bir səhv olmadan tərtib və çalışır.

Unboxing aşağıdakı şərtlər Java compiler ilə tətbiq edilir -

  • bir obyekt müvafiq ibtidai dəyər gözləyir metodu bir parametri kimi qəbul zaman.
  • bir obyekt müvafiq ibtidai tipli dəyişən təyin zaman
  • Aşağıdakı misal düşünün -

Listing2: Unboxing göstərən Sample kodu

[kod]

idxal java.util.ArrayList;idxal java.util.List; public class UnboxingCheck { ictimai statik void main(Sim[] args) { in = yeni tam Integer(-8); // 1. Unboxing through method invocation int absVal = absoluteValue( in ); System.out.println( “mütləq dəyər ” + in + ” = ” + absVal ); siyahı<ikiqat> doubleList = Yeni ArrayList<ikiqat>(); // 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( i int ) { return (mən < 0) ? -mən : mən; }}

[/kod]

Autoboxing və unboxing oxumaq və anlamaq üçün asan kod yazmaq üçün geliştirici imkan verir. Aşağıdakı cədvəldə ibtidai veri türleri və onların müvafiq banderol obyektlərin göstərir -

Primitive Type Wrapper Class
boolean Boolean
byte byte
kömürləşdirmək Character
float sal
int Tam
uzun uzun
qısa qısa

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

Autoboxing və unboxing müqayisə operatorları ilə edilə bilər. Aşağıdakı kodu parçasını edilə bilər necə göstərir -

Listing3: Nümunə kodu Autoboxing göstərən və müqayisə operatorları istifadə unboxing

[kod]

public class BoxedComparator {

ictimai statik void main(Sim[] args) {

in = yeni tam Integer(25);

əgər (in < 35)

System.out.println(“int dəyəri = ” + in);

}

}

[/kod]
Autoboxing və üsulu həddindən artıq ilə unboxing

Autoboxing ya unboxing metodu həddindən artıq halda edilir. Bu, aşağıdakı qaydaları əsasında olur -

  • Genişləndirilməsi beats boks - Olduqda bir vəziyyət genişlənmə və boks arasında seçim, genişlənmə üstünlük edir -

Listing4: həddindən artıq üstünlük göstərən Sample kodu

[kod]

public class WideBoxed { public class WideBoxed { static void methodWide(i int) { System.out.println(“int”); } static void methodWide( tam i ) { System.out.println(“Tam”); } ictimai statik void main(Sim[] args) { short shVal = 25; methodWide(shVal); } }}

[/kod]

Bu proqramın çıxış edir - int

  • Genişlənmə Varargs atır - Olduqda bir vəziyyət genişlənmə və varargs arasında seçim, genişlənmə üstünlük edir -

Listing5: həddindən artıq üstünlük göstərən Sample kodu

[kod]

public class WideVarArgs {

static void methodWideVar(int i1, int i2) {

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

}

static void methodWideVar(Tam… mən) {

System.out.println(“Integers”);

} ictimai statik void main( Sim[] args) {

qısa shVal1 = 25;

qısa shVal2 = 35;

methodWideVar( shVal1, shVal2);

}

}

[/kod]

  • Boks Varargs atır - Olduqda bir vəziyyət boks və varargs arasında seçim, boks üstünlük edir -

Listing6: həddindən artıq üstünlük göstərən Sample kodu

[kod]

public class BoxVarargs {

static void methodBoxVar(da Integer) {

System.out.println(“Tam”);

}

static void methodBoxVar(Tam… mən) {

System.out.println(“Integers”);

}

ictimai statik void main(Sim[] args) {

int intVal1 = 25;

methodBoxVar(intVal1);

}

}

[/kod]

Things Autoboxing istifadə etmək üçün yadda -

biz hər yaxşı xüsusiyyət bəzi çatışmazlıqlar ilə gəlir ki, bildiyiniz kimi, Autoboxing bu mövzuda bir istisna deyil. Bu funksiyanı istifadə edərkən geliştirici unutulmamalıdır bəzi mühüm güllə altında var -

  • Bu primitiv data növləri və obyekt, həm də tətbiq edilə bilər kimi == "qarışıqlıq çıxarır - bərabərlik operator - bərabərlik operator ilə obyektlərin müqayisə. operator obyektlərin tətbiq edildikdə, Bu, həqiqətən obyektlərin istinad və dəyərləri müqayisə.

Listing7: müqayisə göstərən Sample kodu

[kod]

public class Karşılaştırıcısı {

ictimai statik void main(Sim[] args) {

Instinct Integer = Yeni Integer(1);

Tam secondInt = yeni tam(1);

əgər (== Instinkt secondInt) {

System.out.println(“həm də bir bərabərdir”);

} daha {

System.out.println(“Həm də bir bərabər deyil”);

}

}

}

[/kod]

  • obyekt və bərabərlik və relational operatoru ibtidai Qarışdırma - biz bir obyekt ilə ibtidai data type müqayisə etsək, sonra unboxing obyekt null əgər NullPointerException atmaq bilər baş.
  • Obyekt Cached - valueOf-ci ildən()üsul kutulu ibtidai obyektləri yaratmaq üçün istifadə olunur, istifadə obyektlərin cached. Java integers önbelleğe-ci ildən -128 to 128, Bu cached obyektlərin fərqli davranmaq bilər.
  • Performance deqradasiyası - daha tez-tez run QS çıxarır istenmeyen obyekt yaradır Autoboxing ya unboxing ərizə performansını yoran.

Autoboxing əlverişsiz

Baxmayaraq ki autoboxing bir sıra üstünlüklərə malikdir, aşağıdakı çatışmamazlıqlara malikdir -

  • autoboxing olur yaradılmış loop lazımsız obyektlərin ərzində baş verir və əgər bu proqram performansını aşağı yavaş bilər. aşağıdakı kodu düşünün -

Listing8: performans məsələ göstərən Sample kodu

[kod]

public int sumEvenNumbers(siyahı<Tam> intList) { int sum = 0; uğrunda (tam i: intList) əgər ( mən % 2 == 0 ) məbləğ = i; return sum;}

[/kod]

kodu bu parça, [kod] məbləğ = i; [/kod] kimi genişləndirəcək [kod] məbləği = məbləği + mən; [/kod]. ' ' Əməliyyatı Tam obyekt edilə bilməz ildən, JVM məbləğ Tam Obyekt unboxing tetikler və sonra nəticə geri autoboxed edir.

  • JDK əvvəl 1.5, data növləri int və Tamsayı fərqli idi və bu iki növ həddindən metodu halda heç bir əngəl olmadan istifadə edilmişdir. İndi autoboxing və Unboxing ilə, Bu trickier olmuşdur. Bu misal ArrayList ilə yüklənmir aradan qaldırılması metodu. Class ArrayList iki aradan qaldırılması üsulları var - aradan qaldırılması (indeks) və aradan qaldırılması (obyekt). In this case, üsul overloading olmayacaq və müvafiq üsul müvafiq parametrləri ilə adlanacaq.

Nəticə

Autoboxing müvafiq banderol və ya Obyekt bir ibtidai data type gizli mexanizmdir. Compiler valueOf istifadə() üsul Obyekt ibtidai çevirmək və intValue istifadə etmək(), doubleValue() s Obyekt ibtidai dəyər almaq üçün. autoboxing In, bir boolean Boolean çevrilir, Byte üçün byte, Character char, float changes to Float, int Tamsayı gedir, uzun qısa qısa və uzun islamı gedir, dönüşüm unboxing əks istiqamətdə olur isə.

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