Jaký je rozdíl mezi int a celé číslo v jazyce Java a C #?

hlasů
222

Četl jsem více Joel on Software , když jsem narazil Joel Spolsky říkal něco o určitý druh programátor znát rozdíl mezi inta Integerv Java / C # (objektově orientovaného programovacího jazyka).

Takže, jaký je v tom rozdíl?

Položena 02/08/2008 v 22:47
zdroj uživatelem
V jiných jazycích...                            


24 odpovědí

hlasů
216

V Javě, dále jen ‚int‘ typ je primitivní, vzhledem k tomu, ‚integer‘ typ je objekt.

V C #, dále jen ‚int‘ typ je stejný jako System.Int32a typ hodnoty (což je více, jako je Java ‚int‘). Celé číslo (stejně jako jiné typy hodnot) může být v rámečku ( „zabalený“) do objektu.


Rozdíly mezi objekty a primitiva jsou poněkud nad rámec této otázky, ale shrnout:

Objekty poskytnout zázemí pro polymorfismus, jsou předány podle odkazu (nebo přesněji mít odkazy předány hodnotou), a jsou přidělovány z haldy . Naopak primitiva jsou neměnné typy, které jsou předány podle hodnoty a jsou často přidělené z komína .

Odpovězeno 02/08/2008 v 22:55
zdroj uživatelem

hlasů
135

No, v Javě int je primitivní, zatímco Integer je objekt. Což znamená, pokud jste provedli novou Integer:

Integer i = new Integer(6);

Dalo by se zavolat nějakou metodu na I:

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

Zatímco u int:

int i = 6;

Nemůžete volat jakékoliv metody na to, protože to je prostě primitivní. Tak:

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

bude produkovat chyby, protože int není objekt.

int je jedním z mála primitiv v Javě (spolu s char a některé další). Nejsem si 100% jistý, ale myslím, že objekt Integer víceméně jen má vlastnost int a spoustu metod, které interagují s tímto majetkem (jako metoda toString () pro příklad). Takže Integer je ozdobný způsob, jak pracovat s int (Stejně jako snad String je ozdobný způsob, jak pracovat se skupinou znaků).

Vím, že Java není C, ale od té doby jsem nikdy naprogramovaný v jazyce C se jedná o nejbližší bych mohl přijít na odpověď. Snad to pomůže!

Integer objekt javadoc

Integer Ojbect vs. int primitivní srovnání

Odpovězeno 02/08/2008 v 23:05
zdroj uživatelem

hlasů
32

Přidám k vynikajícím odpovědi výše uvedených, a mluvit o boxu a rozbalení, a jak to platí pro Javu (ačkoli C # má to taky). Budu používat jen Java terminologii, protože jsem víc au fait s tím.

Jak již bylo uvedeno odpovědi, intje jen číslo (nazvaný unboxed typ), zatímco Integerje objekt (který obsahuje číslo, tudíž v rámečku typ). V Java hlediska, že prostředky (na rozdíl od ne být schopný volat metody int), nelze ukládat intnebo jiné typy non-objektů ve sbírkách ( List, Map, atd). Za účelem jejich uložení, je třeba nejprve box je v odpovídajícím krabici typu.

Java 5 a dále mají něco jako auto-boxu a automatické rozbalení které umožňují boxu / rozbalení je třeba udělat v zákulisí. Porovnávat: Java 5 verze:

Deque<Integer> queue;

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

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

Java 1.4 nebo starší (bez generika jeden):

Deque queue;

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

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

Je třeba poznamenat, že i přes krátkost ve verzi Java 5, obě verze generují identickou bytecode. Tak, ačkoli auto-boxu a automatické rozbalení je velmi pohodlné, protože budete psát méně kódu, tyto operace se stalo v zákulisí, se stejnými náklady runtime, takže stále musíte být vědomi své existence.

Snad to pomůže!

Odpovězeno 03/08/2008 v 03:32
zdroj uživatelem

hlasů
26

Budu post tady, protože některé z dalších míst mírně nepřesné s ohledem na C #.

Správně: int je alias System.Int32.
Špatně: float není alias System.Float, ale proSystem.Single

V podstatě, int je rezervované klíčové slovo v programovacím jazyce C # a je alias pro System.Int32typ hodnoty.

plavat a Float však není totéž, jako správný typ systém ‚‘ float‚‘ je System.Single. Tam jsou některé druhy, jako je to, že vyhradil klíčová slova, která se nezdá přímo odpovídat názvům typu.

V C # není žádný rozdíl mezi ‚‘ int‚‘ a ‚‘ System.Int32‚‘, nebo některý z dalších dvojic nebo klíčová slova / typů systémů, s výjimkou při definování výčty. S výčty můžete určit velikost úložiště používat a v tomto případě lze použít pouze vyhrazené klíčové slovo, a ne systém runtime název typu.

Wether hodnotou v int bude uložen v zásobníku, v paměti, nebo jako odkazovaný objekt haldy závisí na kontextu a jak jej použít.

Toto prohlášení v metodě:

int i;

definuje proměnné itypu System.Int32, žijící v registru nebo na stacku, v závislosti na optimalizaci. Stejný deklarace v typu (struct nebo třída) definuje člen pole. Stejné prohlášení v seznamu Způsob argumentů definuje parametr, se stejnými možnostmi skladování jako u lokální proměnné. (všimněte si, že tento bod není platný, pokud začnete tahání metody iterátoru do mixu, to jsou zcela odlišné zvířata)

Chcete-li získat objekt haldy, můžete použít box:

object o = i;

toto vytvoří krabicovou verzi obsahu ina haldě. IL můžete přistupovat metody na objektu haldy přímo, ale v jazyce C # je třeba ji házet zpátky do int, což bude vytvářet další kopie. To znamená, že objekt na haldě nelze snadno měnit v C # bez vytvoření nového krabicovou verzi nové hodnoty int. (Fuj, tento odstavec nečte všechno tak snadno.)

Odpovězeno 04/08/2008 v 15:11
zdroj uživatelem

hlasů
18

Pokud jde o Javu 1.5 a autoboxing existuje významná „vtípek“, který přichází hrát při porovnávání integer objekty.

V Javě, Integer objektů s hodnotami -128 až 127 jsou neměnná (to znamená, že pro jeden konkrétní celočíselná hodnota, řekněme 23, všechny objekty Integer instance pomocí programu s hodnotou 23 bodů na přesně stejný objekt).

Například tento vrátí pravda:

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

Zatímco toto se vrací false:

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

== porovnává podle reference (dělá proměnné ukazují na stejný objekt).

Tento výsledek může, ale nemusí lišit v závislosti na tom, co JVM, který používáte. Specifikace autoboxing pro Javu 1.5 vyžaduje, aby celá (-128 až 127), vždy boxu na stejný objekt obálky.

Řešení? =), Jeden by měl vždy používat Integer.equals () metoda při porovnání celé číslo objektů.

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

Více informací na java.net například při bexhuff.com

Odpovězeno 05/08/2008 v 21:49
zdroj uživatelem

hlasů
17

V Javě existují dva základní typy v JVM . 1) Základní typy a 2) Typy referencí. int je primitivní a celé číslo je typ třídy (což je druh referenčního typu).

Primitivní hodnoty nesdílejí stav s ostatními primitivními hodnotami. Proměnná, jejíž typ je primitivní typ vždy drží primitivní hodnotu tohoto typu.

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

Objekt je dynamicky vytvořené instance třídy nebo pole. Referenční hodnoty (často jen reference) jsou odkazy na tyto objekty a speciální null reference, které odkazuje na žádném objektu. Tam může být mnoho odkazů na stejný objekt.

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

Také v Javě vše je předán podle hodnoty. S objekty hodnota, která se předává je reference na objekt. Tak další rozdíl mezi int a Integer v Javě je to, jak jsou předávány v volání metod. Například v

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

Proměnná dva je předán jako primitivní celé číslo 2. typu vzhledem k tomu,

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

Proměnná dva je předán jako odkaz na objekt, který je držitelem celé číslo 2.


@WolfmanDragon: Heslo odkazem bude fungovat jako tak:

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

Pokud je přírůstek nazývá se předá odkaz (ukazatel) na proměnné A . A přírůstek funkce přímo modifikuje proměnnou A .

A pro typy objektů, že to bude fungovat takto:

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

Vidíte ten rozdíl teď?

Odpovězeno 06/08/2008 v 12:08
zdroj uživatelem

hlasů
11

V jazyce C #, int je jen alias pro System.Int32, řetězec System.String, double pro System.Doubleetc ...

Osobně dávám přednost int, string, double, atd, protože nevyžadují using System;prohlášení :) hloupá důvod, já vím ...

Odpovězeno 03/08/2008 v 00:37
zdroj uživatelem

hlasů
8

Existuje mnoho důvodů, proč používat obálky tříd:

  1. Dostáváme navíc chování (například můžeme použít metody)
  2. Můžeme ukládat nulové hodnoty, zatímco v primitiva nemůžeme
  3. Sbírky podporují ukládání objektů a ne primitiva.
Odpovězeno 31/07/2014 v 11:07
zdroj uživatelem

hlasů
8

V platforem, jako je Java, ints jsou primitiva, když Integerje objekt, který má pole celé číslo. Důležitý rozdíl je, že primitiva jsou vždy vedena kolem hodnotou a ze své podstaty jsou neměnné.

Jakákoli operace zahrnující primitivní proměnné vždy vrátí novou hodnotu. Na druhé straně jsou objekty kolovat odkazem. Dalo by se argumentovat, že bod na objekt (AKA referenční hodnotu), je také kolovat hodnotou, ale obsah není.

Odpovězeno 31/01/2009 v 03:49
zdroj uživatelem

hlasů
7

Jáva:

int, double, long, byte, float, double, short, boolean, char- primitiva. Používá se pro držení základní datové typy podporovaných jazykem. primitivní typy nejsou součástí hierarchie objektů, a oni nedědí objekt. Thet can'be projít odkazem na metody.

Double, Float, Long, Integer, Short, Byte, Character, A Boolean, jsou typu Obaly, balené v java.lang. Všechny číselné obalů typu definovat konstruktory, které umožňují, aby objekt být vyrobena z dané hodnoty nebo řetězec reprezentace této hodnoty. Používání objektů lze přidat režii i ty nejjednodušší výpočtů.

Počínaje JDK 5, Java zahrnoval dvě velmi užitečné funkce: autoboxing a autounboxing. Autoboxing / rozbalení výrazně zjednodušuje a zefektivňuje kód, který je třeba převést do primitivní typy objektů, a vice versa.

Příklad konstruktérů:

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

Příklad boxu / rozbalení:

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

Příklad 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
    }
}

PS Herberta Schildt kniha byla brána jako referenční.

Odpovězeno 13/06/2016 v 19:31
zdroj uživatelem

hlasů
7

int se používá k deklarovat primitivní proměnné

e.g. int i=10;

Celé číslo se používá k vytvoření referenční proměnnou třídy Integer

Integer a = new Integer();
Odpovězeno 11/12/2011 v 08:19
zdroj uživatelem

hlasů
7

To již byla zodpovězena pro Javu, tady je C # Odpověď:

„Celé číslo“ není platný typ název v jazyce C # a „int“ je jen alias pro System.Int32. Také, na rozdíl od Java (nebo C ++), nejsou žádné speciální primitivní typy v jazyce C #, každý instance typu v jazyce C # (včetně int) je objekt. Zde je několik demonstrativní kód:

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;
}
Odpovězeno 04/08/2008 v 22:02
zdroj uživatelem

hlasů
6

už jste někdy naprogramovat do té doby (int) je jedním z primitivních typů, které můžete nastavit pro vaše proměnné (stejně jako char, float, ...).

ale Integer je třída wrapper, který můžete použít k tomu některé funkce na int variabilní (např převést na řetězec nebo vise versa, ...), ale mějte na vědomí, že metody v třídách obálky jsou statické, takže je můžete použít kdykoliv bez vytvoření instance třídy celé číslo. jako rekapitulace:

int x;
Integer y; 

x a y jsou obě proměnné typu int, ale y je zabalené podle třídy Integer a má několik metod, které používají, ale i případ, že budete muset volat některé funkce Integer obálky třídy, můžete to udělat jednoduše.

Integer.toString(x);

ale být vědomi toho, že oba x a y jsou korektní, ale chcete-li je používat jen jako primitivní typ, použijte jednoduchý formulář (používá se pro definování x).

Odpovězeno 17/05/2014 v 12:56
zdroj uživatelem

hlasů
6

A ještě jedna věc, která nevidím v předchozí odpovědi: V Java primitivní obaly třídy jako Integer, Double, float, booleovské ... a String jsou suposed být neměnná, takže při předání instance těchto tříd použil metoda nemohla měnit své údaje v žádném případě do opozice s většinou jiných tříd, které interní data mohou být změněny veřejných metod. Tak, že tato třída má pouze ‚getrové‘ metody, ne ‚tvůrci‘, kromě konstruktoru.

V java programu jsou String literály uloženy v samostatné části paměti haldy, pouze například pro doslovný, pro úsporu paměti opětovné využití těchto instancí

Odpovězeno 06/08/2008 v 15:33
zdroj uživatelem

hlasů
4

V jazyce Java, inttyp je primitivní datový typ, kde jako Integertyp je objekt.

V C # je inttyp je také typ dat stejný jako System.Int32. integer(Stejně jako jiné typy hodnot) může být v rámečku ( „zabalený“) do objektu.

Odpovězeno 27/04/2017 v 07:25
zdroj uživatelem

hlasů
4

Int a Integer v Javě a C # jsou dva různé pojmy používané reprezentovat různé věci. Je to jeden z primitivních datových typů, které lze přiřadit do proměnné, která může uložit přesně. Jedna hodnota jejího deklarovaného typu najednou.

Například:

int number = 7;

Tam, kde intje datový typ přiřazena proměnné čísla, která drží hodnotu sedm. Takže do intje jen primitivní není objekt.

Zatímco Integerje obal třída pro primitivní datový typ, který má statické metody. Které mohou být použity jako argument způsobem, který vyžaduje objekt, kde jako int může být použita jako argument způsobem, který vyžaduje celočíselnou hodnotu, která může být použita pro aritmetického výrazu.

Například:

Integer number = new Integer(5);
Odpovězeno 07/08/2014 v 11:50
zdroj uživatelem

hlasů
4

V obou jazycích (Java a C #) intje 4-byte celé číslo se znaménkem.

Na rozdíl od Java, C # poskytuje obě podepsané a nepodepsané celočíselné hodnoty. Jako Java a C # jsou předmětem objektově orientovaný, některé operace v těchto jazycích nemapují přímo do návodu od běhu, a tak musí být definován jako součást objekt určitého typu.

C # poskytuje System.Int32což je typ hodnotu pomocí část paměti, která patří k referenčnímu typu na haldě.

Java poskytuje java.lang.Integercož je referenční typu působí na int. Tyto metody Integernelze sestavit přímo instructions.So jsme pole hodnotu int převést do instance celé číslo a pomocí metod, které očekává výskyt některých typů (jako na dobu spuštění toString(), parseInt(), valueOf()atd).

V C # proměnná int odkazuje na System.Int32.Anyhodnotu 4 bajtů v paměti může být interpretován jako primitivní int, který může být manipulován instance System.Int32.So int je alias pro System.Int32.Whenpoužití metod, celočíselné povahy jako int.Parse(), int.ToString()atd. Celé číslo zkompilován FCL System.Int32struct volat příslušné metody, jako Int32.Parse(), Int32.ToString().

Odpovězeno 17/07/2014 v 07:02
zdroj uživatelem

hlasů
3

Java int je primitivní datový typ, zatímco Integer je třída Helper je použít k převodu na jednoho datového typu na jiný.

Například:

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

Primitivní datové typy jsou ukládat nejrychlejší dostupné paměti, kde je třída Helper je složitá a ukládat do paměti Heep.

reference od "David Gassner" Java Essential Training.

Odpovězeno 28/02/2016 v 18:42
zdroj uživatelem

hlasů
3

Int variabilní má 32 bitů podepsané celočíselnou hodnotu. Celé číslo (s velkým I) drží odkaz na objekt (třída) integer, nebo null.

Java automaticky vrhá mezi nimi; z celých čísel na int vždy, když se objekt celé číslo vyskytuje jako argument provozovatele int, nebo je přiřazen k int proměnné, nebo hodnota int je přiřazena proměnné číslo. Tento odlitek se nazývá box / rozbalení.

Je-li celé číslo proměnná odkazování null je unboxed, explicitně či implicitně, je NullPointerException je hozen.

Odpovězeno 26/11/2015 v 10:54
zdroj uživatelem

hlasů
1

„Int“ je primitivní datový typ a „Integer“ v obálce třídy v Javě. „Celé číslo“ může být použit jako argument způsobem, který vyžaduje objekt, přičemž jako „Int“ může být použit jako argument způsobem, který vyžaduje celočíselnou hodnotu, která může být použita pro aritmetického výrazu.

Odpovězeno 04/08/2017 v 09:57
zdroj uživatelem

hlasů
1

int je předdefinovaná v knihovně funkce C #, ale v Javě můžeme vytvořit oject integer

Odpovězeno 06/03/2017 v 05:08
zdroj uživatelem

hlasů
0

01. Celé číslo může být nulový. Ale int nemůže být null.

Integer value1 = null; //OK

int value2 = null      //Error

02. Pouze mohou předávat hodnoty Třídy typu wrapper jakékoliv třídě kolekce.

(Obálky tříd - logická hodnota, Character, byte, short, Integer, Long, Float, Double)

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

Ale normálně přidáme primitivních hodnot do třídy kolekce? Je bod 02 správná?

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

Ano 02 je správná, beacouse autoboxing.

Autoboxing je automatický převod, že java kompilátor činí mezi primitivní typu a jejich odpovídajících třídy obálky.

Pak 5 convert jako celočíselná hodnota od autoboxing.

Odpovězeno 05/06/2018 v 11:35
zdroj uživatelem

hlasů
0

(Java verze) v jednoduchých slov int je primitivní a Integer je wrapper objekt pro int.

Jedním z příkladů, kdy použít Integer vs int Když chcete porovnat a int proměnnou opět null to bude hodit chybu.

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...}
Odpovězeno 15/02/2018 v 21:04
zdroj uživatelem

hlasů
0

Java podle mých znalostí, pokud učící se pak, když napíšete int a; pak v Javě generických bude kompilovat kód, jako je celé číslo s = new celé číslo. Takže, podle generik celé číslo se nepoužívá, ale je používán int. takže je tam, takže takový rozdíl.

Odpovězeno 22/09/2016 v 09:53
zdroj uživatelem

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