Java'da Integer ve int arasındaki fark nedir?


249

Örneğin neden şunları yapabilirsiniz:

int n = 9;

Ama değil:

Integer n = 9;

Ve şunları yapabilirsiniz:

Integer.parseInt("1");

Ama değil:

int.parseInt("1");

35
integer sınıf, int ilkel bir tiptir
Anycorn

24
Sen edebilirsiniz yapmak Integer n = 9;(eğer java çok eski bir sürümünü kullanmıyorsanız) nedeniyle Autoboxing için
Alderath

Yanıtlar:


321

intilkel bir tiptir. Tür değişkenleri, inttemsil etmek istediğiniz tamsayı için gerçek ikili değeri saklar. int.parseInt("1")çünkü mantıklı değil intise değil herhangi yöntemi yok bu nedenle sınıf ve.

IntegerJava dilindeki diğerlerinden farklı olmayan bir sınıftır. Tipi değişkenleri Integerdeposu referansları için Integer, diğer herhangi bir referans (nesne) tip gibi nesneler. sınıftan Integer.parseInt("1")statik yönteme yapılan bir çağrıdır (bu yöntemin aslında bir değil de bir döndürdüğünü unutmayın ).parseIntIntegerintInteger

Daha spesifik olmak gerekirse, Integertek tip alana sahip bir sınıftır int. Bu sınıf, intjenerik tipler veya nullabiliteye ihtiyaç duyduğunuz durumlar gibi başka herhangi bir nesne gibi muamele görmeniz gereken yerlerde kullanılır .

Java'daki her ilkel türün eşdeğer bir sarmalayıcı sınıfına sahip olduğuna dikkat edin :

  • byte vardır Byte
  • short vardır Short
  • int vardır Integer
  • long vardır Long
  • boolean vardır Boolean
  • char vardır Character
  • float vardır Float
  • double vardır Double

Wrapper sınıfları Object sınıfından miras alır ve ilkel yok. Böylece Nesne referansı veya Generics ile koleksiyonlarda kullanılabilir.

Java 5'ten beri otomatik kutulamaya sahibiz ve ilkel ve sarıcı sınıf arasındaki dönüşüm otomatik olarak yapılır. Ancak, bu ince hatalar ve performans sorunları getirebileceğinden dikkatli olun; dönüşümler konusunda açık olmak asla acıtmaz.


6
Gelen C#tüm veri türleri "adlar" ve int.Parse()(değil gerçekten öyle olsa bile) mantıklı mı
Vahid Amiri

22
@ VSG24 ... ama bu bir Java sorusuydu ve bu bir Java cevabı. C#burada tamamen alakasız.
Darkhogg

3
Bunun iyi bir örneği olabilir: Derleme hatası: Liste <int> Geçerli: Liste <Integer>
hagai

Ek bilgi her zaman yarar
sumit sharma

1
Yeni bilgiler öğrenmeyi seviyorum, özellikle de bilgi mevcut konuyla ilgili olduğunda. Teşekkürler Vahid.
Paul Oliver

30

Tamsayı bir sınıftır ve int ilkel bir tiptir.

Şu bağlantılardan okumaya devam edin:


1
Belirtmek istiyorum, bunun iki nedenden dolayı mükemmel bir cevap olduğunu düşünüyorum: 1- Kısa ve doğru, izleyiciyi / askeriyi akılda tutarak 2- Her şeyi yanıt metnine koymak yerine ek ayrıntılar için yön sağlar sorular bunu doğru ve özlü bir şekilde cevaplayabilir (bazıları doğru ve eksiksiz olmak için çok daha fazla ayrıntı ve nüans gerektirir), ancak tüm cevapların bu kadar basit ve doğrudan olmaya çalıştığını düşünüyorum.
DRich

11
Heh, bence aslında tam tersi. İlkel türün ne olduğunu bilmiyorsanız, "int ilkel bir türdür" size hiçbir şey söylemez. (Ve eğer yaparsanız, int ve Integer arasındaki farkı zaten biliyorsunuzdur). Ve okuyucuyu "Bağlantı 1" ve "Bağlantı 2" etiketli iki bağlantıya göndermek, özellikle sadece ilgili bölümleri alıntılamakla karşılaştırıldığında, oldukça yararsızdır.
Steve Bennett

7

Bir Tamsayı hemen hemen ilkel tür int için bir sarıcıdır. Hayatı sizin için biraz daha kolaylaştırmak için Integer sınıfının tüm işlevlerini kullanmanızı sağlar.

Java'da yeniyseniz, takdir etmeyi öğrenmeniz gereken bir şey Java dokümanlarıdır. Örneğin, Tamsayı Sınıfı hakkında bilmek istediğiniz her şey ayrıntılı olarak belgelenmiştir.

Bu, Integer sınıfının belgelerinin dışındadır:

Integer sınıfı, bir nesneye ilkel tür int değerini sarar. Integer türünde bir nesne, türü int olan tek bir alan içerir.


7
Bu biraz noktayı kaçırıyor. Örneğin Integer, bir sınıf gibi , kaplarda (ilkel tiplerin aksine) depolanabilir.
Oliver Charlesworth

6

Bir int değişkeni 32 bit işaretli bir tamsayı değeri tutar. Bir Tamsayı (büyük harf I ile), (sınıf) tamsayı türündeki bir nesneye veya null değerine başvuru içerir.

Java ikisi arasında otomatik olarak yayın yapar; Integer nesnesi bir int işlecine bağımsız değişken olarak gerçekleştiğinde veya bir int değişkenine atandığında veya bir Integer değişkenine int değeri atandığında, Integer'den int'e. Bu yayınlamaya boks / kutudan çıkarma denir.

Null değerine başvuran bir Integer değişkeni kutudan çıkarılmışsa, açıkça veya örtük olarak, bir NullPointerException oluşturulur.

(Yukarıdaki metinde "değişken" terimi yerel değişken, alan veya parametre anlamına gelir)


5

IntegerJava'da sarıcı tipini belirtirken, intilkel tiptir. Java'daki ilkel veri türleri hariç her şey, Java'yı ima eden nesnelerin yüksek nitelikli saf nesne yönelimli bir programlama dili olduğu gibi uygulanır. Gerekirse, tüm temel türler Java'da sarmalayıcı türleri olarak da kullanılabilir. İlkel tiplerle bazı performans avantajlarınız olabilir ve bu nedenle sarıcı tipleri sadece gerektiğinde kullanılmalıdır.

Aşağıdaki örnekte.

Integer n = 9;

sabiti 9ediliyor otomatik kutulu ( auto-boxingve unboxingotomatik gerçekleşir java 5itibaren) için Integerve bu yüzden de bu ve benzeri deyimi kullanabilirsiniz Integer n = new Integer(9). Bu aslında açıklama yoluyla elde edilirInteger.valueOf(9).intValue();


3

int, bir nesne değil, ilkel bir tiptir. Bu, onunla ilişkili hiçbir yöntem olmadığı anlamına gelir. Tamsayı yöntemlere sahip bir nesnedir (parseInt gibi).

Daha yeni java ile otomatik boks (ve kutudan çıkarma) için işlevsellik vardır. Bu, derleyicinin gerektiğinde Integer.valueOf (int) veya integer.intValue () ekleyeceği anlamına gelir. Bu aslında yazmak mümkün olduğu anlamına gelir

Integer n = 9;

olarak yorumlanır

Integer n = Integer.valueOf(9);

3

Tamsayı bir sarmalayıcı sınıfı / Object ve int ilkel tiptir. Bir koleksiyonda int değerlerini saklamak istediğinizde bu fark büyük rol oynar, çünkü yalnızca nesneleri değer olarak kabul ederler (jdk1.4'e kadar). JDK5, otomatik boks nedeniyle tümüyle farklı bir hikaye.


5
JDK5 + ayrıca yalnızca nesneleri kabul eder; o Autoboxing derleyici otomatik arama sağlar sadece müzik Integer.valueOf(i)ya Integer.intValue()sana. Collection<int>hala çalışmaz. Yani bu tamamen farklı bir hikaye değil - aynı hikaye, sadece biraz steno ile.
yshavit

kabul. Üzgünüm, ifadelerim bunu yansıtmayabilir.
kosa

3

Java'da ilkel bir veri türü, Integer bir Helper sınıfı iken, bir veri türünü diğerine dönüştürmek için kullanılır.

Örneğin:

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

İlkel veri türleri, Helper sınıfının karmaşık olduğu ve yığın bellekte saklandığı en hızlı belleği depolar.

"David Gassner" Java Temel Eğitimi referans.


2

intbir tamsayıyı temsil eden ilkel bir tiptir. oysa Integersaran bir nesne int. IntegerNesne size böyle onaltılık dize, vb dönüştürmek olarak daha fazla işlevsellik verir

OOP kavramlarını ile de kullanabilirsiniz Integer. Örneğin, generics (yani ) için Integer kullanabilirsiniz .Collection<Integer>


2

Bu Java: Komple Referans, Dokuzuncu Baskı'dan alınmıştır.

Java , dil tarafından desteklenen temel veri türlerini tutmak için int veya double gibi ilkel türler (basit türler olarak da bilinir) kullanır . Performans için bu miktarlar için nesneler yerine ilkel tipler kullanılır . Bu değerler için nesnelerin kullanılması , en basit hesaplamalara bile kabul edilemez bir ek yük getirir . Böylece, ilkel tipleri nesne hiyerarşisinin parçası değildir ve onlar devralır Nesne yapamaz .

İlkel türlerin sunduğu performans avantajına rağmen, bir nesne temsiline ihtiyaç duyacağınız zamanlar vardır. Örneğin, bir yönteme başvurarak ilkel bir türü geçiremezsiniz . Ayrıca, Java tarafından uygulanan standart veri yapılarının çoğu nesneler üzerinde çalışır, yani bu (nesneye özgü) veri yapılarını ilkel türleri saklamak için kullanamazsınız . Bu (ve diğer) durumları işlemek için Java, bir nesne içinde ilkel bir türü içine alan sınıflar olan tür sarmalayıcıları sağlar.

Wrapper sınıfları doğrudan Java'nın otomatik boks özelliği ile ilgilidir. Tür sarmalayıcıları Çift, Kayan, Uzun, Tamsayı, Kısa, Bayt, Karakter ve Boole'dir . Bu sınıflar, ilkel türleri Java'nın nesne hiyerarşisine tam olarak entegre etmenizi sağlayan çok çeşitli yöntemler sunar.


1

Java kod çalışma zamanını optimize etmek için , vb. Dahil olmak üzere int ilkel tür (ler) eklenmiştir float, boolancak orada sarıcı sınıflarla birlikte gelirler, böylece gerektiğinde bunları üye olarak gelen birçok yardımcı programla birlikte standart Java nesnesi olarak dönüştürebilir ve kullanabilirsiniz. işlevleri (örneğin Integer.parseInt("1")).


1

intIntegerJava'da bir Referans veya Sarmalayıcı Tipi (Sınıf) iken ilkel bir veri türüdür .

sonra java 1.5hangi kavramını tanıtmak Autoboxing ve unboxing hem başlatabilir intveya Integerbunun gibi.

int a= 9
Integer a = 9 // both valid After Java 1.5.

neden Integer.parseInt("1");ama değil int.parseInt("1");??

Integerjdkkütüphanede tanımlanan bir Class ve Class'a parseInt()ait statik bir yöntemdirInteger

Yani, Integer.parseInt("1");java'da mümkündür. ancak intjava'da ilkel türdür (anahtar kelime gibi varsayılır). Yani, çağrı yapamazsınız parseInt()ile int.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.