Saya sedang membaca Lebih Banyak Joel tentang Perangkat Lunak ketika saya bertemu Joel Spolsky mengatakan sesuatu tentang tipe programmer tertentu yang mengetahui perbedaan antara int
dan Integer
di Java / C # (Bahasa Pemrograman Berorientasi Objek).
Jadi, apa bedanya?
Jawaban:
Di Jawa, tipe 'int' adalah primitif, sedangkan tipe 'Integer' adalah objek.
Dalam C #, tipe 'int' sama dengan
System.Int32
dan 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 .
sumber
Nah, di Jawa int adalah primitif sedangkan Integer adalah Object. Artinya, jika Anda membuat Integer baru:
Anda dapat memanggil beberapa metode di i:
Sedangkan dengan int:
Anda tidak dapat memanggil metode apa pun di dalamnya, karena itu hanyalah primitif. Begitu:
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
sumber
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,
int
hanya angka (disebut tipe unboxed ), sedangkanInteger
objek (yang berisi angka, maka tipe kotak ). Dalam istilah Jawa, yang berarti (selain tidak mampu memanggil metode padaint
), Anda tidak dapat menyimpanint
atau 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:
Java 1.4 atau yang lebih lama (tidak ada obat generik):
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!
sumber
Saya hanya akan memposting di sini karena beberapa posting lain sedikit tidak akurat dalam kaitannya dengan C #.
Benar:
int
adalah alias untukSystem.Int32
.Salah:
float
bukan alias untukSystem.Float
, tetapi untukSystem.Single
Pada dasarnya, int adalah kata kunci yang dicadangkan dalam bahasa pemrograman C #, dan merupakan alias untuk
System.Int32
tipe 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:
mendefinisikan variabel
i
tipeSystem.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:
ini akan membuat salinan kemas isi
i
pada 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.)sumber
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:
Meskipun ini mengembalikan 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.
Info lebih lanjut di java.net Contoh di bexhuff.com
sumber
127
diambil darisun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
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.
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.
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
Variabel dua dilewatkan sebagai tipe integer primitif 2. Sedangkan di
Variabel dua dilewatkan sebagai referensi ke objek yang memiliki nilai integer 2.
@ WolfolfDragon: Lulus dengan referensi akan bekerja seperti ini:
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:
Apakah Anda melihat perbedaannya sekarang?
sumber
Di C #, int hanyalah alias untuk
System.Int32
, string untukSystem.String
, gandakan untukSystem.Double
dll ...Secara pribadi saya lebih suka int, string, double, dll. Karena mereka tidak memerlukan
using System;
pernyataan :) Alasan konyol, saya tahu ...sumber
Ada banyak alasan untuk menggunakan kelas wrapper:
sumber
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:
sumber
int digunakan untuk mendeklarasikan variabel primitif
Integer digunakan untuk membuat variabel referensi kelas Integer
sumber
Dalam platform seperti Java,
int
s adalah primitif sedangkanInteger
objek 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.
sumber
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
sumber
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:
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.
tetapi ketahuilah bahwa x dan y keduanya korektif tetapi jika Anda ingin menggunakannya hanya sebagai tipe primitif, gunakan formulir sederhana (digunakan untuk mendefinisikan x).
sumber
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
, DanBoolean
, adalah jenis pembungkus, dikemas dalamjava.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:
Contoh tinju / unboxing:
Contoh autoboxing / autounboxing:
Buku PS Herbert Schildt diambil sebagai referensi.
sumber
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
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:
Di mana
int
datatype ditugaskan ke nomor variabel yang memegang nilai tujuh. Jadi,int
hanya sebuah primitif, bukan objek.Sedangkan a
Integer
adalah 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:
sumber
Dalam kedua bahasa (Java dan C #)
int
adalah 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.Int32
tipe nilai yang menggunakan bagian memori yang termasuk dalam tipe referensi di heap.java menyediakan
java.lang.Integer
jenis referensi yang beroperasi padaint
. Metode dalamInteger
kaleng 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 (sepertitoString()
,parseInt()
,valueOf()
dll).Dalam C # variabel int mengacu pada nilai
System.Int32.Any
4-byte dalam memori dapat diartikan sebagai primitif int, yang dapat dimanipulasi dengan contoh System.Int32.So int adalah alias untukSystem.Int32.When
menggunakan metode terkait integer sepertiint.Parse()
,int.ToString()
dll. Integer dikompilasi ke dalam FCLSystem.Int32
struct memanggil metode masing-masing sepertiInt32.Parse()
,Int32.ToString()
.sumber
Di Jawa,
int
tipe adalah tipe data primitif, sedangkanInteger
tipe adalah objek.Di C #,
int
tipe ini juga tipe data yang sama denganSystem.Int32
. Sebuahinteger
(sama seperti jenis nilai lainnya) dapat dikotakkan ("dibungkus") menjadi sebuah objek.sumber
Di Java int adalah tipe data primitif sementara Integer adalah kelas Helper, digunakan untuk mengonversi satu tipe data ke yang lain.
Sebagai contoh:
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".
sumber
"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.
sumber
01. Integer bisa menjadi nol. Tetapi int tidak boleh nol.
02. Hanya dapat melewati nilai tipe Wrapper Classes ke kelas koleksi mana pun.
(Kelas Wrapper - Boolean, Karakter, Byte, Pendek, Integer, Panjang, Mengambang, Ganda)
Tapi biasanya kita menambahkan nilai primitif ke kelas koleksi? Apakah point 02 benar?
Ya 02 sudah benar, beacouse
autoboxing.
Kemudian 5 dikonversi sebagai nilai Integer dengan cara autoboxing.
sumber
int
sudah ditentukan sebelumnya dalam fungsi perpustakaan c # tetapi di java kita dapat membuat objekInteger
sumber
(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.
sumber
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 generikInteger
tidak digunakan tetapiint
digunakan. jadi ada perbedaan di sana.sumber
int adalah tipe data primitif. Integer adalah kelas pembungkus. Itu bisa menyimpan data int sebagai objek.
sumber
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.
sumber