Qual é a diferença entre um int e um número inteiro em Java e C #?

votos
222

Eu estava lendo Mais Joel on Software quando me deparei com Joel Spolsky dizendo algo sobre um determinado tipo de programador de saber a diferença entre um inte um Integerem Java / C # (Object Oriented Programming Languages).

Então qual é a diferença?

Publicado 02/08/2008 em 22:47
fonte usuário
Em outras línguas...                            


27 respostas

votos
216

Em Java, do tipo 'int' é uma primitiva, enquanto que o tipo da 'Integer' é um objecto.

Em C #, do tipo 'int' é a mesma System.Int32e é um tipo de valor (isto é mais parecido com o Java 'int'). Um número inteiro (assim como quaisquer outros tipos de valor) pode ser encaixotado ( "embrulhado") em um objeto.


As diferenças entre objetos e primitivos são um pouco além do âmbito desta questão, mas para resumir:

Objectos fornecer às instalações para o polimorfismo, são passados por referência (ou tem mais precisão as referências passaram por valor), e são atribuídas a partir da pilha . Por outro lado, primitivos são tipos imutáveis que são passados por valor e muitas vezes são atribuídos a partir da pilha .

Respondeu 02/08/2008 em 22:55
fonte usuário

votos
135

Bem, em Java um int é um primitivo enquanto um Integer é um objeto. Ou seja, se você fez uma nova Integer:

Integer i = new Integer(6);

Você poderia chamar algum método em i:

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

Considerando que, com um int:

int i = 6;

Você não pode chamar quaisquer métodos sobre ele, porque é simplesmente um primitivo. Assim:

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

produziria um erro, porque int não é um objeto.

int é um dos poucos primitivas em Java (juntamente com carvão animal e alguns outros). Não estou 100% de certeza, mas eu estou pensando que o objeto Integer mais ou menos apenas tem uma propriedade int e um monte de métodos para interagir com que a propriedade (como o método toString () por exemplo). Então Integer é uma maneira extravagante para trabalhar com um int (Assim como talvez String é uma maneira extravagante de trabalhar com um grupo de caracteres).

Eu sei que Java não é C, mas desde que eu nunca programado em C este é o mais próximo que eu poderia vir para a resposta. Espero que isto ajude!

javadoc objeto Integer

Integer Ojbect vs comparação primitivo int

Respondeu 02/08/2008 em 23:05
fonte usuário

votos
32

Vou adicionar aos excelentes respostas dadas acima, e falar sobre boxing e unboxing, e como isso se aplica a Java (embora C # tem isso também). Vou usar apenas terminologia Java, porque eu sou mais au fait com isso.

À medida que as respostas mencionado, inté apenas um número (chamado o desemoldurado tipo), enquanto que Integeré um objecto (que contém o número, por conseguinte, um encaixotado tipo). Em termos de Java, que meios (para além de não ser capaz de chamar métodos int), você não pode armazenar intou outros tipos não-objeto em coleções ( List, Map, etc.). A fim de armazená-los, você deve primeiro caixa-los em seu tipo em caixa correspondente.

Java 5 em diante têm algo chamado auto-boxing e auto-unboxing que permitem que o boxe / unboxing a ser feito nos bastidores. Compare e contraste: Java 5 versão:

Deque<Integer> queue;

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

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

Java 1.4 ou anterior (sem genéricos quer):

Deque queue;

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

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

Deve-se notar que, apesar da brevidade na versão Java 5, ambas as versões gerar bytecode idênticos. Assim, embora auto-boxing e auto-unboxing é muito conveniente porque você escrever menos código, essas operações que acontecem nos bastidores, com os mesmos custos de tempo de execução, então você ainda tem que estar ciente de sua existência.

Espero que isto ajude!

Respondeu 03/08/2008 em 03:32
fonte usuário

votos
26

Eu só vou postar aqui uma vez que alguns dos outros lugares são um pouco imprecisa em relação ao C #.

Correta: int é um alias para System.Int32.
Errado: float não é um alias para System.Float, mas paraSystem.Single

Basicamente, int é uma palavra-chave reservada na linguagem de programação C #, e é um alias para o System.Int32tipo de valor.

flutuar e Float não é o mesmo no entanto, como o tipo de sistema certo para '' float'' é System.Single. Existem alguns tipos como este que reservou palavras-chave que não parecem coincidir com os nomes de tipo diretamente.

Em C #, não há diferença entre '' int'' e '' System.Int32'', ou qualquer um dos outros pares ou palavras-chave / tipos de sistema, excepto quando definindo enumerações. Com enums você pode especificar o tamanho de armazenamento de usar e neste caso você só pode usar a palavra-chave reservada, e não o nome do tipo de tempo de execução do sistema.

O tempo que o valor no int serão armazenados na pilha, na memória, ou como um objeto pilha de referência depende do contexto e como você usá-lo.

Esta declaração de um método:

int i;

define uma variável ido tipo System.Int32, vivendo em registo ou na pilha, dependendo optimizações. A mesma declaração em um tipo (estrutura ou classe) define um campo de membro. A mesma declaração em uma lista de argumentos método define um parâmetro, com as mesmas opções de armazenamento como para uma variável local. (note que este número não é válido se você começar a puxar métodos de iterador na mistura, estes são diferentes animais no total)

Para obter um objeto de pilha, você pode usar o boxe:

object o = i;

isso irá criar uma cópia em caixa do conteúdo ina pilha. Em IL você pode acessar métodos no objeto pilha diretamente, mas em C # você precisará lançá-lo de volta para um int, que irá criar uma outra cópia. Assim, o objeto na pilha não pode ser facilmente mudado em C # sem criar uma nova cópia em caixa de um novo valor int. (Ugh, este parágrafo não lê tudo o que facilmente.)

Respondeu 04/08/2008 em 15:11
fonte usuário

votos
18

Em relação Java 1.5 e autoboxing há uma importante "peculiaridade" que vem para jogar quando se compara objetos inteiros.

Em Java, Integer objetos com os valores de -128 a 127 são imutáveis (isto é, para um valor inteiro particular, dizem 23, todos os objetos Integer instanciado através de seu programa com o valor de 23 pontos para o exato mesmo objeto).

Exemplo, este retorna verdadeira:

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

Enquanto isso retorna false:

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

O == compara por referência (faz as variáveis ​​apontar para o mesmo objecto).

Este resultado pode ou não pode ser diferente dependendo o que JVM você está usando. A especificação autoboxing para Java 1.5 requer que inteiros (-128 a 127) Caixa de sempre para o mesmo objeto wrapper.

Uma solução? =) Deve-se utilizar sempre o método Integer.equals () quando se comparam os objetos Integer.

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

Mais informações em java.net Exemplo de bexhuff.com

Respondeu 05/08/2008 em 21:49
fonte usuário

votos
17

Em Java, existem dois tipos básicos na JVM . 1) tipos primitivos e 2) tipos de referência. int é um tipo primitivo e Integer é um tipo de classe (que é uma espécie de tipo de referência).

valores primitivos não compartilham estado com outros valores primitivos. Uma variável cujo tipo é um tipo primitivo sempre tem um valor primitivo desse tipo.

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

Um objecto é um exemplo classe criado dinamicamente ou uma matriz. Os valores de referência (frequentemente apenas referências) são apontadores para estes objectos e uma referência especial nula, que se refere a nenhum objecto. Pode haver muitas referências para o mesmo objeto.

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

Também em Java tudo é passado por valor. Com objectos do valor que é passada é a referência para o objecto. Assim, uma outra diferença entre int e Integer em java é como eles são passados ​​em chamadas de método. Por exemplo, em

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

A variável de dois é transmitido como o tipo primitivo inteiro 2. Considerando em

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

A variável de dois é passada como uma referência a um objecto que contém o valor de número inteiro 2.


@WolfmanDragon: Passagem por referência funcionaria assim:

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

Quando incremento é chamado ele transmite uma referência (ponteiro) a variável de um . Eo incremento de função modifica diretamente variável um .

E para os tipos de objetos que funcionaria da seguinte forma:

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

Você vê a diferença agora?

Respondeu 06/08/2008 em 12:08
fonte usuário

votos
11

Em C #, int é apenas um apelido para System.Int32, corda para System.String, duplo para System.Doubleetc ...

Pessoalmente eu prefiro int, corda, dobro, etc., porque eles não requerem uma using System;declaração :) Um motivo bobo, eu sei ...

Respondeu 03/08/2008 em 00:37
fonte usuário

votos
8

Há muitas razões para usar classes de mensagens publicitárias:

  1. Recebemos comportamento adicional (por exemplo, podemos usar métodos)
  2. Podemos armazenar valores nulos enquanto em primitivos não podemos
  3. Coleções suportam o armazenamento de objetos e não primitivas.
Respondeu 31/07/2014 em 11:07
fonte usuário

votos
8

Em plataformas como Java, ints são primitivos, enquanto Integeré um objeto que detém um campo inteiro. A distinção importante é que os primitivos são sempre repassados por valor e por definição, são imutáveis.

Qualquer operação que envolva uma variável primitiva sempre retorna um novo valor. Por outro lado, os objetos são repassados ​​por referência. Pode-se argumentar que o apontar para o objecto (AKA a referência) também está a ser passada em torno de valor, mas os conteúdos não são.

Respondeu 31/01/2009 em 03:49
fonte usuário

votos
7

Java:

int, double, long, byte, float, double, short, boolean, char- primitivas. Usado para segurar os tipos de dados básicos suportados pela linguagem. os tipos primitivos não fazem parte da hierarquia de objetos, e eles não herdam objeto. Thet can'be passar por referência a um método.

Double, Float, Long, Integer, Short, Byte, Character, E Boolean, são invólucros tipo, embalados em java.lang. Todas as embalagens de tipo numérico definem construtores que permitem que um objecto a ser construído a partir de um determinado valor, ou uma representação de cadeia desse valor. Usando objetos pode adicionar uma sobrecarga para mesmo o mais simples dos cálculos.

Começando com JDK 5, Java incluiu duas características muito úteis: autoboxing e autounboxing. Autoboxing / unboxing simplifica grandemente e simplifica o código que deve converter tipos de primitivas em objetos, e vice-versa.

Exemplo de construtores:

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

Exemplo de boxe / 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
    }
}

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

O livro de PS Herbert Schildt foi tomado como referência.

Respondeu 13/06/2016 em 19:31
fonte usuário

votos
7

int é utilizado para declarar variável primitivo

e.g. int i=10;

Inteiro é utilizado para criar variável de referência de número inteiro classe

Integer a = new Integer();
Respondeu 11/12/2011 em 08:19
fonte usuário

votos
7

Este já foi respondida para Java, aqui está a resposta C #:

"Integer" não é um nome de tipo válido em C # e "int" é apenas um apelido para System.Int32. Além disso, ao contrário do (Java ou C ++) não existem quaisquer tipos de primitivas especiais em C #, cada instância de um tipo em C # (incluindo int) é um objecto. Aqui está um código de demonstrativo:

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;
}
Respondeu 04/08/2008 em 22:02
fonte usuário

votos
6

Você já programou antes disso (int) é um dos tipos primitivos que pode definir para as suas variáveis ​​(assim como char, float, ...).

mas Integer é uma classe wrapper que você pode usá-lo para fazer algumas funções em uma variável int (por exemplo, convertê-lo para string ou vice-versa, ...), mas manter a nota que os métodos nas classes de mensagens publicitárias são estáticos para que você possa usá-los a qualquer hora, sem criar uma instância da classe Integer. como uma recapitulação:

int x;
Integer y; 

x e y são as duas variáveis ​​do tipo int, mas y é envolto por uma classe Integer e tem vários métodos que você usa, mas i caso de necessidade de chamar algumas funções de classe wrapper Integer você pode fazê-lo simplesmente.

Integer.toString(x);

mas esteja ciente de que tanto x e y são corect mas se você quiser usá-los apenas como um tipo primitivo, use o formulário simples (usado para definir x).

Respondeu 17/05/2014 em 12:56
fonte usuário

votos
6

Só mais uma coisa que eu não ver nas respostas anteriores: Em Java wrappers primitivos classes como Integer, Double, Float, Boolean ... e cordas são suposto ser invariante, de modo que quando você passar uma instância dessas classes a invocada método não poderia alterar seus dados de qualquer forma, em Oposição com a maioria das outras classes, que os dados internos poderiam ser alterados por seus métodos públicos. Para que essa classe tem apenas métodos 'getter', não dos formadores ", além do construtor.

Em um programa java Strings são armazenados em uma parte separada da memória heap, apenas uma instância para literal, para economizar memória reutilizar as instâncias

Respondeu 06/08/2008 em 15:33
fonte usuário

votos
4

Em Java, o inttipo é um tipo de dados primitivos, enquanto que o Integertipo é um objecto.

Em C #, o inttipo também é um tipo de dados igual System.Int32. Um integer(assim como quaisquer outros tipos de valor) pode ser encaixotado ( "embrulhado") em um objeto.

Respondeu 27/04/2017 em 07:25
fonte usuário

votos
4

Um int e Integer em Java e C # são dois termos diferentes usados ​​para representar coisas diferentes. É um dos tipos de dados primitivos que podem ser atribuídos a uma variável que pode armazenar exatamente. Um valor de seu tipo declarado de cada vez.

Por exemplo:

int number = 7;

Onde inté o tipo de dados atribuído ao número variável que contém o valor de sete. Assim, um inté apenas um primitivo não um objeto.

Enquanto uma Integeré uma classe de invólucro para um tipo de dados que tem primitivo métodos estáticos. Que pode ser usado como um argumento para um método que requer um objecto, onde int como pode ser usado como um argumento para um método que requer um valor inteiro, que pode ser usado para a expressão aritmética.

Por exemplo:

Integer number = new Integer(5);
Respondeu 07/08/2014 em 11:50
fonte usuário

votos
4

Em ambas as línguas (Java e C #) inté 4-byte inteiro assinado.

Ao contrário de Java, C # Fornece ambos os valores inteiros assinados e não assinados. Como Java e C # são objeto object-oriented, algumas operações em línguas não mapear diretamente sobre instruções fornecidas pelo tempo de execução e por isso precisa ser definido como parte de um objeto de algum tipo.

C # fornece System.Int32o qual é um tipo de valor usando uma parte da memória que pertence ao tipo de referência na pilha.

java fornece java.lang.Integerque é um tipo de referência que operam em int. Os métodos Integernão pode ser compilado directamente para executar o tempo instructions.So nós caixa um valor int para convertê-lo em um exemplo do número inteiro e utilizar os métodos que espera exemplo de algum tipo (como toString(), parseInt(), valueOf()etc.).

Em C # variável int refere-se ao System.Int32.Anyvalor de 4 bytes em memória pode ser interpretado como um int primitiva, que pode ser manipulado por exemplo de System.Int32.So int é uma abreviatura para System.Int32.Whenusando métodos relacionados com inteiros como int.Parse(), int.ToString()etc inteiro é compilado em o FCL System.Int32struct chamando os respectivos métodos, como Int32.Parse(), Int32.ToString().

Respondeu 17/07/2014 em 07:02
fonte usuário

votos
3

int é um tipo de dados primitivos. Integer é uma classe wrapper. Ele pode armazenar int dados como objetos.

Respondeu 03/06/2019 em 10:01
fonte usuário

votos
3

Em int Java é um tipo de dados primitivo enquanto Integer é uma classe auxiliar, que é usado para converter para um tipo de dados para outro.

Por exemplo:

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

tipos de dados primitivos são armazenar o mais rápido memória disponível onde a classe Helper é complexo e armazenar na memória heep.

referência de "David Gassner" Java Training Essential.

Respondeu 28/02/2016 em 18:42
fonte usuário

votos
3

Uma variável int tem um valor inteiro assinado de 32 bits. Um inteiro (com capitais I) contém uma referência a um objecto de (classe) tipo inteiro, ou como nulo.

Java lança automaticamente entre os dois; de Integer para int sempre que o objeto inteiro ocorre como um argumento para um operador ou int é atribuído a uma variável int, ou um valor int é atribuído a um número inteiro variável. Este elenco é chamado de boxe / unboxing.

Se uma variável nula referência Integer é unboxed, explícita ou implicitamente, um NullPointerException é lançada.

Respondeu 26/11/2015 em 10:54
fonte usuário

votos
1

"Int" é primitivo tipo de dados e "Integer" no envoltório Classe em Java. "Inteiro" pode ser usado como um argumento para um método que requer um objecto, enquanto que "int" pode ser usado como um argumento para um método que requer um valor inteiro, que pode ser usado para a expressão aritmética.

Respondeu 04/08/2017 em 09:57
fonte usuário

votos
1

int é pré-definido na biblioteca de função c #, mas em java podemos criar oject de Integer

Respondeu 06/03/2017 em 05:08
fonte usuário

votos
0

Onde é tipo 'inteiro' em C #? Alguém pode me ajudar a encontrá-lo em C #?

Respondeu 20/08/2019 em 12:52
fonte usuário

votos
0

int é um tipo de dados primitivo Considerando inteiro é um objecto. Criando um objeto com Integer lhe dará acesso a todos os métodos que estão disponíveis na classe Integer. Mas, se você criar um tipo de dados primitivo com int, você não será capaz de usar esses métodos inbuild e você tem que defini-los por si mesmo. Mas, se você não quer quaisquer outros métodos e quer tornar o programa mais eficiente de memória, você pode ir com tipo de dados primitivo porque a criação de um objeto irá aumentar o consumo de memória.

Respondeu 03/07/2019 em 08:35
fonte usuário

votos
0

01. Integer pode ser nulo. Mas int não pode ser nulo.

Integer value1 = null; //OK

int value2 = null      //Error

02. Só pode passar valores de tipo classes de mensagens publicitárias para qualquer classe de coleção.

(Classes de mensagens publicitárias - booleano, Caráter, Byte, Short, Integer, Long, Float, Double)

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

Mas normalmente adicionar valores primitivos a classe de coleção? É ponto 02 correto?

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

Sim 02 é correta, beacouse autoboxing.

Autoboxing é a conversão automática que o compilador Java faz entre o tipo primitivo e a sua classe de invólucro correspondente.

Em seguida, 5 converso como valor inteiro por autoboxing.

Respondeu 05/06/2018 em 11:35
fonte usuário

votos
0

(Java Version) em palavras simples int é primitivo e Integer é objeto de invólucro para int.

Um exemplo onde usar Integer vs int, Quando você quiser comparar e int variável novamente nulo ele vai jogar erro.

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...}
Respondeu 15/02/2018 em 21:04
fonte usuário

votos
0

Em java como por meu conhecimento se você aprendiz então, quando você escreve int a; em seguida, em java genérico ele irá compilar o código como integer a = new inteiro. Assim, de acordo com os genéricos inteiro não é usado, mas int é usada. portanto, não é de modo tal diferença aí.

Respondeu 22/09/2016 em 09:53
fonte usuário

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