Apa perbedaan antara int dan Integer di Java dan C #?

262

Saya sedang membaca Lebih Banyak Joel tentang Perangkat Lunak ketika saya bertemu Joel Spolsky mengatakan sesuatu tentang tipe programmer tertentu yang mengetahui perbedaan antara intdan Integerdi Java / C # (Bahasa Pemrograman Berorientasi Objek).

Jadi, apa bedanya?

CodingWithoutComments
sumber
4
C # tidak memiliki tipe Integer.
Yehuda Gabriel Himango

Jawaban:

247

Di Jawa, tipe 'int' adalah primitif, sedangkan tipe 'Integer' adalah objek.

Dalam C #, tipe 'int' sama dengan System.Int32dan merupakan tipe nilai (yaitu lebih seperti java 'int'). Integer (sama seperti jenis nilai lainnya) dapat dikotakkan ("dibungkus") menjadi objek.


Perbedaan antara objek dan primitif agak di luar cakupan pertanyaan ini, tetapi untuk meringkas:

Objek menyediakan fasilitas untuk polimorfisme, diteruskan dengan referensi (atau lebih tepatnya memiliki referensi lewat nilai), dan dialokasikan dari heap . Sebaliknya, primitif adalah tipe yang tidak dapat diubah yang diteruskan oleh nilai dan sering dialokasikan dari stack .

Mat
sumber
61
Pernyataan bahwa "objek [...] diteruskan dengan referensi" membingungkan dan salah, IMO. Lebih akurat untuk mengatakan bahwa "Referensi objek dilewatkan oleh nilai." (Juga primitif tidak selalu dialokasikan dari tumpukan - pertimbangkan bidang primitif dalam suatu objek ...)
Jon Skeet
5
Setidaknya dalam C #, int adalah kata kunci bahasa yang setara dengan jenis Int32 CLR (sebenarnya CTS).
Scott Dorman
6
Maaf, bahasa Inggris tidak membuat pernyataan yang setara "lulus sesuatu dengan referensi" dan "meneruskan referensi ke sesuatu dengan nilai", juga tidak memiliki arti yang setara dalam konteks bahasa pemrograman.
Alan Krueger
8
‒1. Ini mungkin menggambarkan secara akurat bagaimana Java menangani ini, tetapi untuk C # itu jelas salah.
Joey
8
Mengapa ini dipilih? Jawabannya salah. Ini tidak tepat untuk Java, dan bahkan tidak mendekati kanan untuk C #. Seseorang yang membaca ini akan tahu lebih sedikit tentang topik daripada sebelumnya.
Thom Smith
153

Nah, di Jawa int adalah primitif sedangkan Integer adalah Object. Artinya, jika Anda membuat Integer baru:

Integer i = new Integer(6);

Anda dapat memanggil beberapa metode di i:

String s = i.toString();//sets s the string representation of i

Sedangkan dengan int:

int i = 6;

Anda tidak dapat memanggil metode apa pun di dalamnya, karena itu hanyalah primitif. Begitu:

String s = i.toString();//will not work!!!

akan menghasilkan kesalahan, karena int bukan objek.

int adalah salah satu dari sedikit primitif di Jawa (bersama dengan char dan beberapa lainnya). Saya tidak 100% yakin, tetapi saya berpikir bahwa objek Integer kurang lebih hanya memiliki properti int dan sejumlah metode untuk berinteraksi dengan properti itu (seperti metode toString () misalnya). Jadi Integer adalah cara yang bagus untuk bekerja dengan int (Sama seperti mungkin String adalah cara yang bagus untuk bekerja dengan sekelompok karakter).

Saya tahu bahwa Java bukan C, tetapi karena saya tidak pernah memprogram dalam C, inilah yang paling dekat dengan jawaban saya. Semoga ini membantu!

Objek integer javadoc

Integer Ojbect vs perbandingan primitif int

cmcculloh
sumber
di C # int adalah sinonim untuk Int32, lihat stackoverflow.com/questions/62503/c-int-or-int32-should-i-care
ripper234
Saya tidak tahu Java tetapi tidak ada tipe Integer tetapi Int32, Int64 dan mereka semua struct yang merupakan tipe nilai. Primitif berarti dalam C # bahwa tipe didefinisikan dalam FCL (Framework Class Library) oleh tim CLR dan itulah mengapa mereka disebut primitif. Dalam hal ini bahkan Date obj disebut tipe primitif.
Tarik
37

Saya akan menambahkan jawaban luar biasa yang diberikan di atas, dan berbicara tentang tinju dan unboxing, dan bagaimana ini berlaku untuk Java (walaupun C # juga memilikinya). Saya akan menggunakan terminologi Java saja karena saya lebih au fait dengan itu.

Seperti jawaban yang disebutkan, inthanya angka (disebut tipe unboxed ), sedangkan Integerobjek (yang berisi angka, maka tipe kotak ). Dalam istilah Jawa, yang berarti (selain tidak mampu memanggil metode pada int), Anda tidak dapat menyimpan intatau jenis non-objek lain dalam koleksi ( List, Map, dll). Untuk menyimpannya, Anda harus mengepaknya terlebih dahulu dalam jenis kotak yang sesuai.

Java 5 dan seterusnya memiliki sesuatu yang disebut auto-boxing dan auto-unboxing yang memungkinkan tinju / unboxing dilakukan di belakang layar. Bandingkan dan kontras: Versi Java 5:

Deque<Integer> queue;

void add(int n) {
    queue.add(n);
}

int remove() {
    return queue.remove();
}

Java 1.4 atau yang lebih lama (tidak ada obat generik):

Deque queue;

void add(int n) {
    queue.add(Integer.valueOf(n));
}

int remove() {
    return ((Integer) queue.remove()).intValue();
}

Harus dicatat bahwa meskipun singkatnya versi Java 5, kedua versi menghasilkan bytecode yang identik. Jadi, walaupun auto-boxing dan auto-unboxing sangat nyaman karena Anda menulis lebih sedikit kode, operasi ini memang terjadi di belakang layar, dengan biaya runtime yang sama, jadi Anda masih harus menyadari keberadaannya.

Semoga ini membantu!

Chris Jester-Young
sumber
2
Deque tidak ada di java 1.5 atau 1.4. Itu ditambahkan dalam 1.6.
Leo Izen
28

Saya hanya akan memposting di sini karena beberapa posting lain sedikit tidak akurat dalam kaitannya dengan C #.

Benar: int adalah alias untuk System.Int32.
Salah: float bukan alias untuk System.Float, tetapi untukSystem.Single

Pada dasarnya, int adalah kata kunci yang dicadangkan dalam bahasa pemrograman C #, dan merupakan alias untuk System.Int32tipe nilai.

float dan Float tidak sama namun, karena tipe sistem yang tepat untuk '' float'' adalah System.Single. Ada beberapa jenis seperti ini yang telah memesan kata kunci yang sepertinya tidak cocok dengan nama jenis secara langsung.

Dalam C # tidak ada perbedaan antara '' int'' dan '' System.Int32'', atau pasangan atau kata kunci / tipe sistem lainnya, kecuali saat mendefinisikan enum. Dengan enums Anda dapat menentukan ukuran penyimpanan yang akan digunakan dan dalam hal ini Anda hanya dapat menggunakan kata kunci yang dipesan, dan bukan nama jenis runtime sistem.

Apakah nilai dalam int akan disimpan di tumpukan, di memori, atau sebagai objek tumpukan yang dirujuk tergantung pada konteks dan bagaimana Anda menggunakannya.

Pernyataan ini dalam suatu metode:

int i;

mendefinisikan variabel itipe System.Int32, tinggal di register atau di stack, tergantung pada optimisasi. Deklarasi yang sama dalam suatu tipe (struct atau kelas) mendefinisikan bidang anggota. Deklarasi yang sama dalam daftar argumen metode mendefinisikan parameter, dengan opsi penyimpanan yang sama seperti untuk variabel lokal. (perhatikan bahwa paragraf ini tidak valid jika Anda mulai menarik metode iterator ke dalam campuran, ini adalah binatang yang berbeda sama sekali)

Untuk mendapatkan objek tumpukan, Anda bisa menggunakan tinju:

object o = i;

ini akan membuat salinan kemas isi ipada heap. Di IL Anda dapat mengakses metode pada objek heap secara langsung, tetapi dalam C # Anda perlu mengembalikannya ke int, yang akan membuat salinan lain. Dengan demikian, objek pada heap tidak dapat dengan mudah diubah dalam C # tanpa membuat salinan kotak baru dari nilai int baru. (Ugh, paragraf ini tidak membaca dengan mudah.)

Lasse V. Karlsen
sumber
19

Mengenai Java 1.5 dan autoboxing ada "kekhasan" penting yang muncul saat membandingkan objek Integer.

Di Jawa, objek Integer dengan nilai -128 hingga 127 tidak dapat diubah (yaitu, untuk satu nilai integer tertentu, katakan 23, semua objek Integer dipakai melalui program Anda dengan nilai 23 poin ke objek yang sama persis ).

Contoh, ini mengembalikan true:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //  true

Meskipun ini mengembalikan false:

Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); //  false

The == membandingkan dengan referensi (apakah variabel menunjuk ke objek yang sama).

Hasil ini mungkin berbeda atau tidak tergantung pada JVM apa yang Anda gunakan. Spesifikasi autoboxing untuk Java 1.5 mengharuskan bilangan bulat (-128 hingga 127) selalu kotak ke objek pembungkus yang sama.

Sebuah solusi? =) Kita harus selalu menggunakan metode Integer.equals () ketika membandingkan objek Integer.

System.out.println(i1.equals(i2)); //  true

Info lebih lanjut di java.net Contoh di bexhuff.com

andnil
sumber
3
Objek yang dibuat dengan operator baru akan selalu menghasilkan false jika dibandingkan dengan ==. Andreas membingungkan Integer.valueOf (int) dengan Integer (int) baru
McDowell
1
Catatan: nilai default 127diambil darisun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
KNU
1
@ dannil - Saya gunakan untuk bekerja dengan Bex di Stellent. Dia sumber yang hebat untuk mengutip +1 untuk referensi bexhuff.com!
bcar
stackoverflow.com/questions/20877086/…
Ciro Santilli 郝海东 冠状 病 六四 事件 事件 法轮功
19

Di Jawa ada dua tipe dasar dalam JVM . 1) tipe primitif dan 2) tipe referensi. int adalah tipe primitif dan Integer adalah tipe kelas (yang merupakan jenis tipe referensi).

Nilai-nilai primitif tidak berbagi keadaan dengan nilai-nilai primitif lainnya. Variabel yang jenisnya adalah tipe primitif selalu memiliki nilai primitif dari tipe itu.

int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4

Objek adalah instance kelas atau array yang dibuat secara dinamis. Nilai referensi (seringkali hanya referensi) adalah penunjuk ke objek ini dan referensi nol khusus, yang merujuk ke objek yang tidak ada. Mungkin ada banyak referensi ke objek yang sama.

Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the 
                                 // same object as aNumber

Juga di Jawa semuanya dilewatkan oleh nilai. Dengan objek nilai yang dilewatkan adalah referensi ke objek. Jadi perbedaan lain antara int dan Integer di java adalah bagaimana mereka dilewatkan dalam pemanggilan metode. Misalnya dalam

public int add(int a, int b) {
    return a + b;
}
final int two = 2;
int sum = add(1, two);

Variabel dua dilewatkan sebagai tipe integer primitif 2. Sedangkan di

public int add(Integer a, Integer b) {
    return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);

Variabel dua dilewatkan sebagai referensi ke objek yang memiliki nilai integer 2.


@ WolfolfDragon: Lulus dengan referensi akan bekerja seperti ini:

public void increment(int x) {
  x = x + 1;
}
int a = 1;
increment(a);
// a is now 2

Ketika kenaikan disebut melewati referensi (pointer) ke variabel a . Dan fungsi kenaikan secara langsung memodifikasi variabel a .

Dan untuk tipe objek akan berfungsi sebagai berikut:

public void increment(Integer x) {
  x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2

Apakah Anda melihat perbedaannya sekarang?

grom
sumber
Menurut definisi Anda, tidak ada referensi. Apa pun yang dilewati harus memiliki nilai (bahkan nol adalah nilai), bahkan jika itu hanya nilai pointer, jika tidak maka itu hanya set kosong. Dengan istilah CS, pass by reference adalah meneruskan nilai referensi (pointer). Saya agak bingung.?
WolfmanDragon
11

Di C #, int hanyalah alias untuk System.Int32, string untuk System.String, gandakan untuk System.Doubledll ...

Secara pribadi saya lebih suka int, string, double, dll. Karena mereka tidak memerlukan using System;pernyataan :) Alasan konyol, saya tahu ...

huseyint
sumber
2
Dan harus ditambahkan, C # int / Int32 tidak sama dengan Java's Integer.
Yehuda Gabriel Himango
10

Ada banyak alasan untuk menggunakan kelas wrapper:

  1. Kami mendapatkan perilaku ekstra (misalnya kami dapat menggunakan metode)
  2. Kita dapat menyimpan nilai nol sedangkan di primitif kita tidak bisa
  3. Koleksi mendukung penyimpanan objek dan bukan primitif.
Shravan
sumber
8

Ini sudah dijawab untuk Java, inilah jawaban C #:

"Integer" bukan nama jenis yang valid di C # dan "int" hanyalah alias untuk System.Int32. Juga, tidak seperti di Jawa (atau C ++) tidak ada tipe primitif khusus dalam C #, setiap instance dari tipe dalam C # (termasuk int) adalah objek. Berikut ini beberapa kode demonstrasi:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}
Baji
sumber
2
Agar lebih jelas, dalam C #, int serta System.Int32 bukan objek. Mereka adalah tipe nilai dan diperlakukan jauh berbeda oleh CLR dibandingkan objek.
Peter Meyer
4
Sebenarnya, di C # Int32 adalah sebuah objek. Ini adalah objek struct valuetype yang berasal dari system.object. Itu tidak diperlakukan secara khusus berbeda dari objek nilai lain sebagai "int" akan berada di Jawa.
Wedge
8

int digunakan untuk mendeklarasikan variabel primitif

e.g. int i=10;

Integer digunakan untuk membuat variabel referensi kelas Integer

Integer a = new Integer();
nagarajn89
sumber
8

Dalam platform seperti Java, ints adalah primitif sedangkan Integerobjek yang memegang bidang bilangan bulat. Perbedaan penting adalah bahwa primitif selalu diedarkan oleh nilai dan menurut definisi tidak berubah.

Operasi apa pun yang melibatkan variabel primitif selalu mengembalikan nilai baru. Di sisi lain, objek dilewatkan dengan referensi. Orang bisa berpendapat bahwa titik ke objek (referensi AKA) juga sedang diedarkan oleh nilai, tetapi isinya tidak.

mP.
sumber
@ Peter Mortense, Bagaimana (int a; Integer a;) memengaruhi program, maksud saya bagaimana mereka membuat perbedaan selama eksekusi.
Anuj Masand
7

Satu hal lagi yang tidak saya lihat dalam jawaban sebelumnya: Di Jawa kelas pembungkus primitif seperti Integer, Double, Float, Boolean ... dan String dianggap invarian, sehingga ketika Anda melewati sebuah instance dari kelas-kelas tersebut yang dipanggil metode tidak dapat mengubah data Anda dengan cara apa pun, dalam operasi dengan sebagian besar kelas lain, yang data internnya dapat diubah dengan metode publiknya. Sehingga kelas ini hanya memiliki metode 'pengambil', tidak ada 'setter', selain konstruktor.

Dalam program java String literal disimpan dalam bagian yang terpisah dari memori tumpukan, hanya contoh untuk literal, untuk menghemat memori menggunakan kembali contoh-contoh tersebut

Telcontar
sumber
7

pernahkah Anda memprogram sebelum itu (int) adalah salah satu tipe primitif yang dapat Anda atur untuk variabel Anda (seperti char, float, ...).

tetapi Integer adalah kelas wrapper yang dapat Anda gunakan untuk melakukan beberapa fungsi pada variabel int (mis. konversikan ke string atau sebaliknya, ...), tetapi perhatikan bahwa metode di kelas wrapper bersifat statis sehingga Anda dapat menggunakannya kapan saja tanpa membuat instance dari kelas Integer. sebagai rekap:

int x;
Integer y; 

x dan y adalah kedua variabel bertipe int tetapi y dibungkus oleh kelas Integer dan memiliki beberapa metode yang Anda gunakan, tetapi jika Anda perlu memanggil beberapa fungsi kelas integer wrapper Anda dapat melakukannya dengan sederhana.

Integer.toString(x);

tetapi ketahuilah bahwa x dan y keduanya korektif tetapi jika Anda ingin menggunakannya hanya sebagai tipe primitif, gunakan formulir sederhana (digunakan untuk mendefinisikan x).

Mr.Q
sumber
7

Jawa:

int, double, long, byte, float, double, short, boolean, char- primitif. Digunakan untuk menyimpan tipe data dasar yang didukung oleh bahasa. tipe primitif bukan bagian dari hierarki objek, dan mereka tidak mewarisi Objek. Itu tidak bisa lewat referensi ke suatu metode.

Double, Float, Long, Integer, Short, Byte, Character, Dan Boolean, adalah jenis pembungkus, dikemas dalam java.lang. Semua pembungkus tipe numerik mendefinisikan konstruktor yang memungkinkan objek dibangun dari nilai tertentu, atau representasi string dari nilai itu. Menggunakan objek dapat menambahkan overhead bahkan untuk perhitungan paling sederhana.

Dimulai dengan JDK 5, Java telah menyertakan dua fitur yang sangat membantu: autoboxing dan autounboxing. Autoboxing / unboxing sangat menyederhanakan dan merampingkan kode yang harus mengubah tipe primitif menjadi objek, dan sebaliknya.

Contoh konstruktor:

Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException

Contoh tinju / unboxing:

class ManualBoxing {
        public static void main(String args[]) {
        Integer objInt = new Integer(20);  // Manually box the value 20.
        int i = objInt.intValue();  // Manually unbox the value 20
        System.out.println(i + " " + iOb); // displays 20 20
    }
}

Contoh autoboxing / autounboxing:

class AutoBoxing {
    public static void main(String args[]) {
        Integer objInt = 40; // autobox an int
        int i = objInt ; // auto-unbox
        System.out.println(i + " " + iOb); // displays 40 40
    }
}

Buku PS Herbert Schildt diambil sebagai referensi.

J-Alex
sumber
4

Variabel int menyimpan nilai integer bertanda 32 bit. Integer (dengan huruf kapital I) menyimpan referensi ke objek tipe integer (kelas), atau null.

Java secara otomatis melakukan cast di antara keduanya; dari Integer ke int setiap kali objek Integer muncul sebagai argumen ke operator int atau ditugaskan ke variabel int, atau nilai int ditugaskan ke variabel Integer. Casting ini disebut tinju / unboxing.

Jika variabel bilangan bulat referensi Integer unboxed, secara eksplisit atau implisit, NullPointerException dilemparkan.


sumber
4

Int dan Integer di Java dan C # adalah dua istilah berbeda yang digunakan untuk mewakili hal-hal yang berbeda. Ini adalah salah satu tipe data primitif yang dapat ditugaskan ke variabel yang dapat menyimpan dengan tepat. Satu nilai dari tipe yang dinyatakan pada suatu waktu.

Sebagai contoh:

int number = 7;

Di mana intdatatype ditugaskan ke nomor variabel yang memegang nilai tujuh. Jadi, inthanya sebuah primitif, bukan objek.

Sedangkan a Integeradalah kelas pembungkus untuk tipe data primitif yang memiliki metode statis. Itu dapat digunakan sebagai argumen untuk metode yang membutuhkan objek, sedangkan int dapat digunakan sebagai argumen untuk metode yang membutuhkan nilai integer, yang dapat digunakan untuk ekspresi aritmatika.

Sebagai contoh:

Integer number = new Integer(5);
Ricky Muchedzi
sumber
4

Dalam kedua bahasa (Java dan C #) intadalah integer bertanda 4-byte.

Tidak seperti Java, C # Menyediakan nilai integer yang ditandatangani dan tidak ditandatangani. Karena Java dan C # berorientasi objek, beberapa operasi dalam bahasa ini tidak memetakan langsung ke instruksi yang diberikan oleh run time dan karenanya perlu didefinisikan sebagai bagian dari objek dari beberapa tipe.

C # menyediakan System.Int32tipe nilai yang menggunakan bagian memori yang termasuk dalam tipe referensi di heap.

java menyediakan java.lang.Integerjenis referensi yang beroperasi pada int. Metode dalam Integerkaleng tidak dikompilasi langsung untuk menjalankan waktu instructions.So kami kotak nilai int untuk mengubahnya menjadi sebuah contoh dari Integer dan menggunakan metode yang mengharapkan contoh dari beberapa jenis (seperti toString(), parseInt(), valueOf()dll).

Dalam C # variabel int mengacu pada nilai System.Int32.Any4-byte dalam memori dapat diartikan sebagai primitif int, yang dapat dimanipulasi dengan contoh System.Int32.So int adalah alias untuk System.Int32.Whenmenggunakan metode terkait integer seperti int.Parse(), int.ToString()dll. Integer dikompilasi ke dalam FCL System.Int32struct memanggil metode masing-masing seperti Int32.Parse(), Int32.ToString().

Bindumalini KK
sumber
4

Di Jawa, inttipe adalah tipe data primitif, sedangkan Integertipe adalah objek.

Di C #, inttipe ini juga tipe data yang sama dengan System.Int32. Sebuah integer(sama seperti jenis nilai lainnya) dapat dikotakkan ("dibungkus") menjadi sebuah objek.

thamashi97
sumber
3

Di Java int adalah tipe data primitif sementara Integer adalah kelas Helper, digunakan untuk mengonversi satu tipe data ke yang lain.

Sebagai contoh:

double doubleValue = 156.5d;
Double doubleObject  = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();

Tipe data primitif menyimpan memori tercepat yang tersedia di mana kelas Helper kompleks dan menyimpan dalam memori heep.

referensi dari Pelatihan Penting Jawa "David Gassner".

Aqeel Haider
sumber
2

"int" adalah tipe data primitif dan "Integer" di Kelas Wrapper di Jawa. "Integer" dapat digunakan sebagai argumen untuk metode yang membutuhkan objek, di mana "int" dapat digunakan sebagai argumen untuk metode yang membutuhkan nilai integer, yang dapat digunakan untuk ekspresi aritmatika.

Looser
sumber
1

01. Integer bisa menjadi nol. Tetapi int tidak boleh nol.

Integer value1 = null; //OK

int value2 = null      //Error

02. Hanya dapat melewati nilai tipe Wrapper Classes ke kelas koleksi mana pun.

(Kelas Wrapper - Boolean, Karakter, Byte, Pendek, Integer, Panjang, Mengambang, Ganda)

List<Integer> element = new ArrayList<>();
int valueInt = 10;
Integer  valueInteger = new Integer(value);
element.add(valueInteger);

Tapi biasanya kita menambahkan nilai primitif ke kelas koleksi? Apakah point 02 benar?

List<Integer> element = new ArrayList<>();
element.add(5);

Ya 02 sudah benar, beacouse autoboxing.

Autoboxing adalah konversi otomatis yang dibuat oleh kompiler java antara tipe primitif dan kelas pembungkusnya.

Kemudian 5 dikonversi sebagai nilai Integer dengan cara autoboxing.

JustCode
sumber
1

int sudah ditentukan sebelumnya dalam fungsi perpustakaan c # tetapi di java kita dapat membuat objek Integer

Mausam Sinha
sumber
0

(Versi Java) Dalam kata-kata Sederhana int adalah primitif dan Integer adalah objek pembungkus untuk int.

Salah satu contoh di mana menggunakan Integer vs int, Ketika Anda ingin membandingkan dan variabel int lagi null akan membuang kesalahan.

int a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is wrong - cannot compare primitive to null
{
do something...}

Instead you will use,
Integer a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is correct/legal
{ do something...}
Rishabh Agarwal
sumber
0

Di java sesuai pengetahuan saya jika Anda belajar kemudian, ketika Anda menulis int; maka dalam java generic akan mengkompilasi kode seperti Integer a = new Integer(). Jadi, sesuai generik Integertidak digunakan tetapi intdigunakan. jadi ada perbedaan di sana.

Aatu Dave
sumber
Ada 18 jawaban lain untuk pertanyaan ini. Apakah Anda menambahkan sesuatu yang dilewatkan orang lain? Ini tidak membantu bahwa ini bukan tata bahasa untuk memulai.
Teepeemm
0

int adalah tipe data primitif. Integer adalah kelas pembungkus. Itu bisa menyimpan data int sebagai objek.

Kavinda Pushpitha
sumber
0

int adalah tipe data primitif sedangkan Integer adalah objek. Membuat objek dengan Integer akan memberi Anda akses ke semua metode yang tersedia di kelas Integer. Tetapi, jika Anda membuat tipe data primitif dengan int, Anda tidak akan dapat menggunakan metode inbuild tersebut dan Anda harus mendefinisikannya sendiri. Tetapi, jika Anda tidak ingin metode lain dan ingin membuat program lebih efisien memori, Anda bisa menggunakan tipe data primitif karena membuat objek akan meningkatkan konsumsi memori.

Lourdes
sumber