int ve Java ve C # bir tamsayı arasındaki fark nedir?

oy
222

Ben okuyordum Yazılım hakkında daha fazla Joel'i Ben karşıdan karşıya geldi Joel Spolsky bir arasındaki farkı bilmek programcı belirli bir türü hakkında bir şey söylüyor intve bir IntegerJava / C # (Object Oriented Programlama Dilleri) içinde.

Yani, fark nedir?

Oluştur 02/08/2008 saat 22:47
kaynak kullanıcı
Diğer dillerde...                            


27 cevaplar

oy
216

Java, 'Integer' tipi bir amacı ise 'int tipi, bir ilkel.

C # 'int' tipi ile aynıdır System.Int32ve bir bir değer türü (örneğin, daha fazla Java 'int' gibi). Bir tam sayı (diğer herhangi bir değer türleri gibi) olabilir kutulu bir nesneye ( "sarılmış").


nesneler ve ilkel arasındaki farklar bu soruya kapsamı dışındadır biraz, ama özetlemek için:

Nesne , polimorfizm için olanaklar sağlamak referans olarak kabul (veya daha doğru bir değer geçirilir referanslar) vardır ve bunlardan ayrılan yığın . Tersine, ilkel değer geçirilir ve genellikle tahsis edilir değişmez türleri yığın .

Cevap 02/08/2008 saat 22:55
kaynak kullanıcı

oy
135

Bir tamsayı bir nesne iken Eh, Java int bir ilkel. Yeni bir tamsayı yaptıysanız, Anlamı:

Integer i = new Integer(6);

Sen i bazı yöntemi diyebiliriz:

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

Bir int ise:

int i = 6;

sadece ilkel olduğu için, üzerinde herhangi yöntemleri arayamazsın. Yani:

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

int bir amacı olmadığı için, bir hata üretir.

int birkaç ilkel Java (char ve bazı diğerleri ile birlikte) biridir. Ben% 100 emin değilim, ama tamsayı nesne az ya da çok adil bir int özelliği ve (örneğin toString () yöntemi gibi) o mülke ile etkileşim yöntemlerinin bir sürü sahip olduğunu düşünüyorum. Yani Tamsayı int çalışmak için süslü bir yoludur (Tıpkı belki dize karakter bir grup ile çalışmak için süslü bir yoludur).

Java C olmadığını biliyorum ama C programlanmış hiç beri bu ben cevap gelebilir en yakın olanı. Bu yardımcı olur umarım!

Integer nesnesi javadoc

Tamsayı Ojbect int ilkel karşılaştırma vs

Cevap 02/08/2008 saat 23:05
kaynak kullanıcı

oy
32

Yukarıda verilen mükemmel cevaplara ekleyin ve boks ve unboxing bahsetmek ve bu Java nasıl geçerli olduğunu (C # da bunu olmasına rağmen) gerekir. Daha olduğum için, sadece Java terminolojisini kullanacağız au fait bununla.

Yanıt belirtildiği gibi, int(denilen bir sayı, sadece bir kutulamasının ise tipi), Integer(numara, dolayısıyla içeren bir nesnedir kutu tipi). Java açısından, araçlar (ayrı yöntemlerini çağırmak mümkün olmayan o int), saklamak edemez intya da olmayan diğer nesne türleri koleksiyonları (içinde List, Mapvs.). Onları saklamak için, öncelikle karşılık gelen kutulu tip bunları paketleyip gerekir.

Java 5 itibaren denilen bir şey var otomatik boks ve otomatik kutudan çıkarma kutudan çıkarma boks / perde arkasında yapılması için izin verir. Karşılaştırın ve kontrast: Java 5 sürümü:

Deque<Integer> queue;

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

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

Java 1.4 veya daha önceki (hayır jenerik ya):

Deque queue;

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

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

Java 5 sürümünde kısalık rağmen her iki sürüm aynı bayt kodu oluşturmak olduğunu belirtmek gerekir. Daha az kod yazmak çünkü otomatik boks ve otomatik unboxing çok uygun olmasına rağmen Böylece, bu işlemler yapmak yine kendi varlığından haberdar olmak zorunda, aynı çalışma zamanı maliyetlerle, perde arkasında olur.

Bu yardımcı olur umarım!

Cevap 03/08/2008 saat 03:32
kaynak kullanıcı

oy
26

Bazı diğer mesajlar C # ile ilgili olarak küçük sapmalar olduğu için ben sadece burada göndeririz.

Doğru: int takma adıdır System.Int32.
Yanlış: float için bir takma değil System.Floatama içinSystem.Single

Temelde, int C # programlama dilinde ayrılmış bir anahtar kelimedir ve bir başka adıdır System.Int32değer türü.

yüzer ve '' için doğru sistem türü olarak Float Ancak aynı değildir float'' System.Single olduğunu. Doğrudan tipi adlarını eşleşecek şekilde görünmüyor anahtar kelimeleri saklıdır ettiğini bu gibi bazı türleri vardır.

C # arasında hiçbir fark yoktur '' int''' ve '' System.Int32'' ya da çeteleler tanımlarken hariç diğer çiftleri veya anahtar kelimeler / sistem türlerinin her hangi birisini. Çeteleler ile kullanmak depolama boyutunu belirtebilirsiniz ve bu durumda yalnızca saklıdır anahtar kelimeyi değil, sistem zamanı tür adı kullanabilirsiniz.

int değer Hava bellekte, yığın depolanır ya da bir referans yığın nesnesi olarak bağlam ve nasıl kullanmak bağlıdır.

bir yöntemde Bu beyan:

int i;

Bir değişken tanımlar iÇeşidi System.Int32, bir kayıt veya yığın yaşayan iyileştirmeye bağlı. Bir tip (yapı veya sınıf) aynı bildirimi üye alan tanımlar. Bir yöntem, bağımsız değişken listesi aynı bildirimi yerel bir değişken için aynı depolama seçenekleri ile, bir parametre tanımlar. (karışımı içine yineleyici yöntemleri çekerek başlarsanız bu paragraf geçerli olmadığını unutmayın, bu farklı hayvanlar tamamen vardır)

Bir yığın nesnesini almak için, boks kullanabilirsiniz:

object o = i;

Bu içeriğinin bir kutulu kopyasını oluşturur iyığın. IL içinde doğrudan yığın nesne üzerinde yöntemlerini erişebilir, ancak C # Bir kopya daha yaratacak bir int, geri döküm gerekir. Böylece, yığının nesne kolayca yeni int değer için yeni bir kutulu kopyasını oluşturmadan C # değiştirilemez. (Ahh, bu paragraf kolayca tüm okumuyor.)

Cevap 04/08/2008 saat 15:11
kaynak kullanıcı

oy
18

Java 1.5 ile ilgili olarak ve Autoboxing Tamsayı nesneleri karşılaştırırken oynamaya geliyor önemli "cilvesi" var.

Java'da, Tamsayı (e değer ile program sayesinde 23 puan örneği tüm Tamsayı nesneler, 23 demek ki belirli bir tamsayı değeri için olduğu -128 ile 127 iletmenin değerlerle nesneleri tam aynı nesneye).

Örnek, bu doğrudur döndürür:

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

Bu yanlış döndürür iken:

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

== (yapar değişkenler aynı nesneyi işaret) referans ile bu karşılaştırır.

Bu sonuç ya JVM kullanıyorsunuz ne bağlı olarak farklılık olabilir veya olmayabilir. Java 1.5 Autoboxing spesifikasyon tamsayı (-128 ila 127) her zaman aynı sargı nesneye kutu gerektirir.

Bir çözüm? Tamsayı nesneleri karşılaştırırken =) Bir her Integer.equals () yöntemini kullanmak gerekir.

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

More info at java.net de Örnek bexhuff.com

Cevap 05/08/2008 saat 21:49
kaynak kullanıcı

oy
17

Java'da iki temel tipi vardır JVM . 1) Temel türler ve 2) Referans türleri. int temel bir tür olması ve Tamsayı (referans türü türüdür), bir sınıf tipidir.

İlkel değerler diğer ilkel değerlerle devlet paylaşmaz. A tipi değişken basit bir tür, her zaman bu tür bir temel değerini tutar.

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

Bir amacı, dinamik olarak oluşturulan sınıfı örneği veya bir dizidir. Referans değerleri (genellikle sadece referanslar), bu nesneler ve herhangi bir nesne anlamına gelmektedir özel null başvuru, işaretçileri bulunmaktadır. aynı nesneye birçok referanslar olabilir.

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

Ayrıca Java her şeyde değeri tarafından geçirilir. nesne ile iletilen değer nesnesine başvurudur. Yani java int ve Tamsayı arasındaki bir başka fark onlar yöntem çağrılarında geçirilir nasıl. Örneğin

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

Değişken iki Oysa ilkel tamsayı tip 2 olarak geçirilir

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);

Değişken iki tamsayı değeri 2 tutan bir nesne için bir referans olarak geçirilir.


@WolfmanDragon: referans ile Geçiş şöyle çalışacak:

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

Arttırma çağrıldığında değişken bir referans (pointer) geçer a . Ve arttırma işlevi doğrudan değişken değiştirir a .

aşağıdaki gibi Ve nesne türleri için işe yarayacağını:

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

Şimdi fark görüyor musunuz?

Cevap 06/08/2008 saat 12:08
kaynak kullanıcı

oy
11

C # int sadece bir takma ad için System.Int32, dize System.Stringiçin çift, System.Doublevb ...

Onlar gerekmez çünkü Şahsen ben vb int, dize, çift, tercih using System;deyimi :) Saçma nedeni Biliyorum, ...

Cevap 03/08/2008 saat 00:37
kaynak kullanıcı

oy
8

sarıcı sınıfları kullanmak için birçok neden vardır:

  1. Biz ek davranışı (örneğin biz yöntemleri kullanabilirsiniz)
  2. Biz ilkel null değerleri ise saklayabilirsiniz yapamayız
  3. Koleksiyonlar nesneleri değil, ilkeller depolamak destekler.
Cevap 31/07/2014 saat 11:07
kaynak kullanıcı

oy
8

Java gibi platformlarda, intsüre s ilkellerdir Integerbir tamsayı alanı tutan bir amacıdır. Önemli fark ilkelleri zaman değeri yoluyla aktarılabilir ve tanım gereği iletmenin olmasıdır.

İlkel bir değişken içeren herhangi bir işlem her zaman yeni bir değer verir. Öte yandan, objeler, referans ile yaklaşık geçirilir. Bir nesne (AKA referans) için noktası da değeri yaklaşık geçirilmekte olduğu iddia olabilir, ancak içeriği değildir.

Cevap 31/01/2009 saat 03:49
kaynak kullanıcı

oy
7

Java:

int, double, long, byte, float, double, short, boolean, char- ilkel. Muhafaza için dilin desteklediği temel veri tiplerini kullanılır. İlkel türleri nesne hiyerarşisinin parçası değildir ve bunlar Nesne devralmaz. Thet bir yönteme başvurularak geçmek can'be.

Double, Float, Long, Integer, Short, Byte, Character, Ve Boolean, içinde paketlenmiş tip sarma vardır java.lang. Sayısal tür sarma her bir amacı, belirli bir değer veya bu değerden bir dizi gösterimi inşa izin Kurucular tanımlar. Bir yükü ekleyebilir nesneleri kullanarak hesaplamaların basit eşitlemeye.

Autoboxing ve autounboxing: JDK 5 ile başlayarak, Java iki çok yararlı özellikler yer verdi. Autoboxing / kutudan çıkarma büyük ölçüde kolaylaştıran ve tersi nesneleri ilkel türleri dönüştürmek gerekir ve kod kolaylaştırır.

kurucular Örnek:

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

boks / unboxing örneği:

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
    }
}

Autoboxing / autounboxing örneği:

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
    }
}

PS Herbert Schildt kitabı referans olarak alınmıştır.

Cevap 13/06/2016 saat 19:31
kaynak kullanıcı

oy
7

int ilkel değişken bildirmek için kullanılır

e.g. int i=10;

Tamsayı sınıfı tamsayı referans değişken oluşturmak için kullanılır

Integer a = new Integer();
Cevap 11/12/2011 saat 08:19
kaynak kullanıcı

oy
7

Bu zaten Java için yanıtlandı, burada C # cevabı:

"Tamsayı" C # ve "int" in geçerli bir tür adı değil System.Int32 için sadece bir takma addır. Java (veya C ++) 'de herhangi bir özel ilkel türleri C # değil, aksine aynı zamanda, (int dahil) C # tip her örneği bir amacıdır. İşte bazı demonstrasyon kod:

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;
}
Cevap 04/08/2008 saat 22:02
kaynak kullanıcı

oy
6

Hiç daha önce programlanmış olan (int) Eğer (sadece Char, şamandıra, ... gibi) değişkenleri için ayarlayabilirsiniz ilkel türlerinden biridir.

ancak tamsayı bir int değişken bazı işlevleri yapmak için kullanabilirsiniz bir sarmalayıcı sınıf (örn dize ya da tersi ... dönüştürmek), ancak bunları kullanabilirsiniz böylece sarıcı sınıflarında yöntemleri statik olduğu not tutmak zaman Tamsayı sınıfının bir örneğini oluşturmadan. bir özetini olarak:

int x;
Integer y; 

x ve y bir tamsayı sınıfı tarafından sarılır tipi int ama y hem değişkenlerdir ve kullanmak çeşitli yöntemler vardır, ama sen sadece bunu yapabilir Tamsayı sarıcı sınıfının bazı işlevleri çağırmak gerekir harf.

Integer.toString(x);

ama x ve y her ikisi Corect ama sadece ilkel türü olarak kullanmak istiyorsanız, (x tanımlamak için kullanılır) basit formu kullanabilirsiniz unutmayın.

Cevap 17/05/2014 saat 12:56
kaynak kullanıcı

oy
6

Ben önceki cevapları görmüyorum Bir şey daha: Eğer bu sınıfların bir örneği geçerken çağrılan böylece Java'da Tamsayı, Çift, Float, Boolean gibi ilkel sarmalayıcıları sınıflar ... ve String, değişmez olduğu suposed yöntem dahili veri public yöntemler değişmiş olabilir diğer sınıfların, çoğuyla muhalefeti de, herhangi bir şekilde verilerinizi değiştirmez olamazdı. Bu sınıflar sadece 'alıcı' yöntemleri, hayır 'belirleyiciler', sahip olduğu yapıcı yanında Yani.

Java programında dize hazır bu örnekleri yeniden bellek kazanmak için yığın bellek, hazır sadece bir örneği, bir ayrı kısım halinde saklanır

Cevap 06/08/2008 saat 15:33
kaynak kullanıcı

oy
4

Java, inttipi olarak bir temel veri türü, Integertip bir amacıdır.

C # inttürü de bir veri türü aynıdır System.Int32. Bir integer(diğer herhangi bir değer türleri gibi) bir nesneye ( "sarılmış") kutulu edilebilir.

Cevap 27/04/2017 saat 07:25
kaynak kullanıcı

oy
4

Bir int ve Java Tamsayı ve C # farklı şeyler temsil etmek için kullanılan iki farklı terimlerdir. Bu tam olarak depolayan bir değişkene atanabilir ilkel veri türlerinden biridir. bir zamanda partinin belirtilen türüne biri değer.

Örneğin:

int number = 7;

Nerede intdeğerini yedi tutan değişken sayıda atanan veri türüdür. Yani bir intsadece ilkel değil bir nesnedir.

Bir birlikte Integerstatik yöntemler sahip olan bir temel veri türü için bir sarıcı sınıfıdır. Bu int aritmetik ifadesi için kullanılabilecek bir tamsayı değeri, gerektiren bir yönteme, bir argüman olarak kullanılabilir gibi bir nesne, gerektiren bir yönteme, bir argüman olarak kullanılabilir.

Örneğin:

Integer number = new Integer(5);
Cevap 07/08/2014 saat 11:50
kaynak kullanıcı

oy
4

Her iki dilde (Java ve C #) inttamsayı imzalanmış 4 baytlık olduğunu.

Java aksine, C # hem işaretli ve işaretsiz tamsayı değerlerini gösterir. Java ve C # nesne nesne yönelimli olduğundan, bu dillerde bazı işlemler çalışma zamanında tarafından sağlanan talimatlara doğrudan harita ve bu nedenle bazı türünde bir nesnenin parçası olarak tanımlanması gerekir yoktur.

C # içerir System.Int32yığın referans türüne ait bir bellek bölümünü kullanarak bir değer türü olan.

Java içerir java.lang.Integerüzerinde çalışan bir referans türü olan int. Yöntemler Integerbiz tamsayı örneğine haline dönüştürmek ve bazı tip örneği tahmin yöntemleri (gibi kullanmak için bir int değeri kutu instructions.So şirketinden derlenememektedir zaman çalıştırmak için toString(), parseInt(), valueOf()vb.)

C # değişken int belirtir System.Int32.AnySystem.Int32.So int örneği manipüle edilebilir ilkel int olarak yorumlanabilir bellekte 4 byte için bir takma System.Int32.Whengibi tam sayı ile ilişkili yöntemler kullanılarak int.Parse(), int.ToString()vb tamsayı derlendi FCL System.Int32gibi ilgili yöntemler çağrı yapısına bir Int32.Parse(), Int32.ToString().

Cevap 17/07/2014 saat 07:02
kaynak kullanıcı

oy
3

int bir temel veri türüdür. Tamsayı bir sarmalayıcı sınıfıdır. Bu nesneler olarak int verileri depolayabilir.

Cevap 03/06/2019 saat 10:01
kaynak kullanıcı

oy
3

Tamsayı bir Yardımcı sınıfı ise, Java int olarak diğer bir veri türü için dönüştürmek için kullanmaktır, bir temel veri türüdür.

Örneğin:

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

Temel veri türleri Helper sınıfı Heep bellekte karmaşık ve mağaza en hızlı bellek depolamak bulunmaktadır.

"David Gassner'ın" Java Temel Eğitimi referans.

Cevap 28/02/2016 saat 18:42
kaynak kullanıcı

oy
3

Bir int değişkeni 32 bitlik imzalı tamsayı değeri tutar. (Büyük I ile) bir tamsayı (sınıfı) bir nesneye bir başvuru Integer yazın ya da boş olarak tutar.

Java otomatik ikisi arasında atmalarını; Integer nesnesi int operatöre bir bağımsız değişken olarak ortaya çıkar ya da bir int değişkenine atanır veya bir tam sayı değeri bir tamsayı değişken atanan zaman tamsayıdan int. Bu döküm boks / unboxing denir.

Bir tamsayı değişken referans boş açık veya üstü örtülü, kutusuz ise, bir NullPointerException atılır.

Cevap 26/11/2015 saat 10:54
kaynak kullanıcı

oy
1

"Int" temel veri tipi ve Java sarıcı Sınıfı "tamsayı" dir. "Tamsayı" "int" olarak aritmetik ifadesi için kullanılabilecek bir tamsayı değeri, gerektiren bir yönteme, bir argüman olarak kullanılabilecek bir nesne gerektiren bir yönteme, bir argüman olarak kullanılabilir.

Cevap 04/08/2017 saat 09:57
kaynak kullanıcı

oy
1

int kütüphane işlevi c # önceden tanımlanmıştır ancak java biz tamsayı Oject oluşturabilir

Cevap 06/03/2017 saat 05:08
kaynak kullanıcı

oy
0

C # 'tamsayı' türü nerede? Herkes beni C # bulmak için yardımcı olabilir misiniz?

Cevap 20/08/2019 saat 12:52
kaynak kullanıcı

oy
0

Tamsayı bir amacı ise int ilkel veri türüdür. Tamsayı ile bir nesne oluşturmak size tamsayı sınıfında kullanılabilen tüm yöntemlere erişim sağlayacaktır. Eğer int bir ilkel veri türü oluşturmak Ama, eğer, o İçerisine yerleştirilmiş yöntemleri kullanmak mümkün olmayacaktır ve kendiniz onları tanımlamak zorunda. Başka yöntemler istiyor ve program daha bellek verimli kılmak için istemiyorsanız bir nesne oluşturarak bellek tüketimini artıracaktır çünkü Ama, ilkel veri türü ile gidebilirsiniz.

Cevap 03/07/2019 saat 08:35
kaynak kullanıcı

oy
0

01. Tamsayı boş olabilir. Ama int null olamaz.

Integer value1 = null; //OK

int value2 = null      //Error

02. Sadece herhangi bir tahsilat sınıfına Sarıcı Sınıflar tip değer geçirebilirsiniz.

(Sarıcı Sınıflar - Boole, Karakter, Byte, Kısa, Tamsayı, Long, Float, Double)

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

Ama normalde biz toplama sınıfına ilkel değerleri ekleyin? nokta 02 doğru mu?

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

Evet 02 doğru, beacouse autoboxing.

Autoboxing Java derleyici basit tür ve bunların karşılık gelen sargı sınıfı arasında yapan otomatik bir dönüşümdür.

Sonra Autoboxing tarafından tamsayı değeri olarak 5 dönüştürmek.

Cevap 05/06/2018 saat 11:35
kaynak kullanıcı

oy
0

Basit bir deyişle, Int (Java Model) ilkel ve tamsayı int için sarma amacıdır.

Karşılaştırmak ve değişken int istediğinizde, int vs Tamsayı kullanmak bir örneği yine hata atmak olacaktır boş.

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...}
Cevap 15/02/2018 saat 21:04
kaynak kullanıcı

oy
0

Bir int yazarken java bilgim başına, sonra öğrenen eğer; Daha sonra genel java o tamsayı a = new tamsayı gibi bir kod derlemek olacak. Yani, jenerik tamsayı başına kullanılmaz ama int kullanılır. bu yüzden çok bu fark vardır.

Cevap 22/09/2016 saat 09:53
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more