Autoboxing jaboxi eemaldamine Java-s koos mõnede näidetega

Lang L: none (table-of-contents):

Anonim

Sissejuhatus Java-s olevatesse automaatkastidesse ja -boksidesse

Autokast on automaatne teisendamine, mille Java kompilaator teeb primitiivsete tüüpide ja neile vastavate objektide mähkimisklasside vahel, st teisendamine int-ist täisarvuks, kahekordseks kahekordseks jne. Kastiboksimine on automaatne teisendus pakendiklassi objektidest nende ekvivalentseteks primitiivideks, st täisarvuks int jne Seda funktsiooni tutvustati java versioonis 1.5, automaatkasti ja kasti tühjendamist, nagu ka JRE automaatseid protsesse, kõige olulisem siin on kirjutada õige kood, mis ei lisa pildile liigseid ebavajalikke objekte.

Nüüd arutame, kuidas läheb Java automaatkasti ja kastikese sisemine lahti -

  • Kompilaator kasutab väärtusOf () meetodit primitiivide teisendamiseks vastavateks ümbrisobjektideks (st autoboksimiseks) sisemiselt, vastupidisel juhul kasutab ta intValue (), doubleValue () jne nagu paradigmad lahti kastmiseks.
  • Viiteks on allpool mainitud javas kaardistatav ümbris ja primitiivid -
Primitiivne tüüpKääri klass
loogilineBoolean
baitByte
charIseloom
hõljumaUjuk
intTäisarv
pikkPikk
lühikeLühike
kahekordneTopelt

Näited -

  • Võtame nüüd täisarvude loendi ja kasutame siis kasti tühjendamise kontseptsiooni -

import java.util.ArrayList;
public class MyClass (
public static void main(String args()) (
ArrayList intlist = new ArrayList();
//wrapper Integer objects being added here
intlist.add(1);
interest.add(2);
//auto-unboxing is happening here
int x = intlist.get(0);
System.out.println(x);
)
)

  • Ülaltoodud näites näeme x-ile väärtust lisades siiski, et x näib olevat primitiivne, nii et kasti eemaldamine toimub siin automaatselt selle määramise ajal.

public class MyClass (
public static void main(String args()) (
Integer sum =0;
for(int i=0;i<10;i++)
(
sum = sum + i;
)
System.out.println(sum);
)
)

  • Täpselt eespool oleme selles kontekstis näidanud näite -2, kus on esitatud tüüpiline stsenaarium. Kui olete tutvunud objektide loomisega javas, näete, et “täisarv = 0” deklareerib objekti ja kui arvutame for-loop-i sees, siis näeme, et ümbrisele lisatakse primitiivne väärtus “i”. summa ”.
  • Seega võib leida, et esmalt toimub ümberminek ümbrisest primitiivseks, kuna “+” operaator töötab ainult primitiividel ja seega toimub kõigepealt objekti lahtilaadimine, siis toimub arvutamine, siis toimub taas objekti automaatkastimine ja seejärel väärtus määratakse muutujale “summa”.
  • See tekitab JVM-is tarbetuid üldkulusid, kuna luuakse palju vahepealseid täisarvu objekte ja need hävitatakse (hiljem kogutakse prügi), seega võib ilmneda aeglustumine, mistõttu tuleb sellist loogikat käidelda ettevaatlikult.
  • Vaatame nüüd tingimusi, mis erinevad üldistest arusaamadest, ja meil on kood, kus autoboksist ja kastist lahti saamine on väga oluline, et neid mõistaks -

Mõelge allpool toodud lõigule, mis on teie arvates selle väljund?

public class Main
(
public static void main(String() args) (
Integer m = 34123;
Integer x = 34123;
System.out.println(x==m);
)
)

  • Kui ütlete “tõene”, siis olete “vale”, kuna väljund on ka “vale”, kuna seetõttu saame võrrelda niivõrd täisarvu vahemikku -128 kuni 127, kui sellest vahemikust väljuvad väärtused peavad olema karbita.
  • Seetõttu peame võrdlema ülaltoodud täisarvude intValue (), nüüd teeb kompilaator selle atribuudiga valueOf ().
  • Tõenäoliselt, kui see jääb ülalnimetatud vahemikku, annab ülaltoodud kood tõese, kuna see viitab kõigepealt võrdluseks täisarvulisele kogumile.

public class Main
(
public static void main(String() args) (
Integer m = 100;
Integer x = 100;
System.out.println(x==m);
)
)

Selle väärtus on tõeline, kuna 100 on sõna otseses kogumis.

Automaatkast ja lahtilaadimine Java-s koos meetodi ülekoormamisega

  • Enne kui sildistame automaatkasti ja kasti eemaldamise meetodi ülekoormamisele, eeldatakse, et lugeja on meetodi ülekoormamise kontseptsiooniga tutvunud, anname lihtsalt vähe teadmisi ja lisateavet leiate sama Oracle'i dokumentatsioonist.
  • Meetodi ülekoormamine on protsess, kus sama meetodi nime kasutatakse erineva arvu sisestusargumentidega, samade nimedega muutujate erinevaid andmetüüpe jne., Kasutatakse mis tahes arvutusmeetodi mitme variandi esitamiseks üldiselt.
  • Võtame sama näite, et seda sügavamalt mõista, ja esitame ka väljundi, mis seekord pildil ilmub -

public class Main
(
public static void main(String() args) (
Overload obj = new Overload();
int i =5;
obj.printval(5);
Integer m = i;
obj.printval(m);
)
)
class Overload
(
public void printval(int i)
(
System.out.println("printing the unboxed value "+ i);
)
public void printval(Integer i)
(
System.out.println("printing the autoboxed value "+ i);
)
)

Väljund -

kasti väärtuse printimine 5
automaatkasti väärtuse printimine 5

Märkus. Võite ülaltoodud programmi käivitada ükskõik millises IDE-s, et ülaltoodud väljund oleks.

  • Seetõttu näitab ülaltoodud käitumine selgelt, et automaatkasti tehnikat kasutatakse ülekoormamise kontseptsioonides märkimisväärselt ja seda tuleb kodeerimise ajal kasutada ettevaatlikult.

Automaatkasti ja kasti eelised Java-

  • Sobiva teisendamise teeb kompilaator automaatselt.
  • Eeldatavasti kirjutab arendaja väiksema koodi ja seeläbi puhtama koodi.
  • Pole vaja käsitsi tüüpi casting-väljendeid.

Järeldus

Nägime autoboksi ja kasti tühjendamise kasulikke juhtumeid, kui kaudne see kontseptsioon on ja kus see võib tekitada plusse ja miinuseid. Seda tuleb kodeerimisel kasutada ettevaatlikult, vastasel juhul võib see kokku liita tarbetu arvutusliku teisenduse üldkulud, seetõttu tuleb ümberarvestused primitiivides teha, et vältida liigset prügivedu üle pea ja ülemäärast ajutist objektide loomist. Nägime ka java ülekoormuskontseptsiooniga automaatkasti kasutamist. Sellega saate kontrollida veel mõnda piirangut.

Soovitatavad artiklid

See on Java-kaardi automaatkasti ja kasti eemaldamise juhend. Siin arutleme ka selle üle, mis on javas automaatkast ja karp? kuidas see mõne näidiskoodiga sisemiselt töötab? Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. Mis on JDBC?
  2. Mis on Java geneerika?
  3. Groovy vs Java
  4. Mis on Java pärand?
  5. Näited ja kuidas Generics töötab C #
  6. JRE vs JVM | 8 parimat erinevust (infograafika)