Qual é a diferença entre Integer e int em Java?


248

Por exemplo, por que você pode fazer:

int n = 9;

Mas não:

Integer n = 9;

E você pode fazer:

Integer.parseInt("1");

Mas não:

int.parseInt("1");

35
inteiro é classe, int é um tipo primitivo
Anycorn

24
Você pode fazer Integer n = 9;devido à autoboxing (a menos que você estiver usando uma versão muito antiga do java)
Alderath

Respostas:


320

inté um tipo primitivo. Variáveis ​​do tipo intarmazenam o valor binário real do número inteiro que você deseja representar. int.parseInt("1")não faz sentido porque nãoint é uma classe e, portanto, não possui métodos.

Integeré uma classe, não diferente de qualquer outra na linguagem Java. Variáveis ​​do tipo Integerarmazenam referências a Integerobjetos, assim como qualquer outro tipo de referência (objeto). Integer.parseInt("1")é uma chamada para o método estático parseIntda classe Integer(observe que esse método realmente retorna um inte não um Integer).

Para ser mais específico, Integeré uma classe com um único campo do tipo int. Essa classe é usada onde você precisa intser tratado como qualquer outro objeto, como em tipos genéricos ou situações em que você precisa de nulidade.

Observe que todo tipo primitivo em Java possui uma classe de wrapper equivalente :

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

As classes de wrapper herdam da classe Object e as primitivas não. Portanto, ele pode ser usado em coleções com referência a objeto ou com genéricos.

Desde o java 5, temos autoboxing, e a conversão entre as classes primitiva e wrapper é feita automaticamente. Cuidado, no entanto, pois isso pode introduzir erros sutis e problemas de desempenho; ser explícito sobre conversões nunca é demais.


6
Em C#todos os tipos de dados têm "aliases" e int.Parse()faz sentido (embora ele realmente não)
Vahid Amiri

22
@ VSG24 ... mas esta era uma pergunta sobre Java, e esta é uma resposta sobre Java. C#é completamente irrelevante aqui.
Darkhogg

3
Um bom exemplo pode ser: Erro de compilação: Lista <int> Válida: Lista <Integer>
hagai 18/01/18

Conhecimento adicional sempre beneficiar
sumit sharma

1
Gosto de aprender coisas novas, principalmente quando o conhecimento está relacionado ao tópico atual. Obrigado Vahid.
Paul Oliver

30

Inteiro é uma classe e int é um tipo primitivo.

Leia estes links:


1
Quero ressaltar, acho que essa é a resposta perfeita por dois motivos: 1 - Concisa e precisa, mantendo o público / as pessoas em mente 2 - Fornece orientações para detalhes adicionais, em vez de colocar tudo no texto da resposta as perguntas podem ser respondidas com precisão e concisão (algumas exigem muito mais detalhes e nuances para serem precisas e completas), mas acho que todas as respostas devem tentar ser simples e diretas.
25316 DRich

11
Acho que é o contrário. "int é um tipo primitivo" não diz nada, se você não sabe o que é um tipo primitivo. (E se você souber, provavelmente já sabe a diferença entre int e Inteiro). E enviar o leitor para dois links denominados "Link 1" e "Link 2" é bastante inútil, especialmente se comparado a apenas citar as seções relevantes.
Steve Bennett

7

Um número inteiro é basicamente apenas um invólucro para o tipo primitivo int. Ele permite que você use todas as funções da classe Integer para tornar a vida um pouco mais fácil para você.

Se você é novo no Java, algo que você deve aprender a apreciar é a documentação do Java. Por exemplo, qualquer coisa que você queira saber sobre a Classe Inteira está documentada em detalhes.

Isso é retirado da documentação da classe Integer:

A classe Integer agrupa um valor do tipo primitivo int em um objeto. Um objeto do tipo Inteiro contém um único campo cujo tipo é int.


7
Isso de certa forma erra o ponto. Por exemplo, como Integeré uma classe, ele pode ser armazenado em contêineres (diferentemente dos tipos primitivos).
Oliver Charlesworth

6

Uma variável int contém um valor inteiro assinado de 32 bits. Um número inteiro (com I maiúsculo) mantém uma referência a um objeto do tipo (classe) número inteiro ou nulo.

Java lança automaticamente entre os dois; de Inteiro para int sempre que o objeto Inteiro ocorre como argumento para um operador int ou é atribuído a uma variável int ou um valor int é atribuído a uma variável Inteiro. Esse casting é chamado de boxe / unboxing.

Se uma variável inteira referenciando nulo estiver fora da caixa, explícita ou implicitamente, uma NullPointerException será lançada.

(No texto acima, o termo "variável" significa variável local, campo ou parâmetro)


5

Integerrefere-se ao tipo de wrapper em Java, enquanto que inté um tipo primitivo. Tudo, exceto os tipos de dados primitivos em Java, é implementado da mesma maneira que os objetos que implicam em Java são uma linguagem de programação orientada a objetos pura e altamente qualificada. Se necessário, todos os tipos de primitivas também estão disponíveis como tipos de wrapper em Java. Você pode ter algum benefício de desempenho com tipos primitivos e, portanto, os tipos de invólucro devem ser usados ​​apenas quando necessário.

No seu exemplo, como abaixo.

Integer n = 9;

a constante 9está sendo encaixotada automaticamente ( auto-boxinge unboxingocorre automaticamente a partir java 5de então) Integere, portanto, você pode usar a declaração dessa maneira e também Integer n = new Integer(9). Isso é realmente alcançado através da declaraçãoInteger.valueOf(9).intValue();


3

int é um tipo primitivo e não um objeto. Isso significa que não há métodos associados a ele. Inteiro é um objeto com métodos (como parseInt).

Com o java mais recente, há funcionalidade para o boxe automático (e o unboxing). Isso significa que o compilador inserirá Integer.valueOf (int) ou integer.intValue () quando necessário. Isso significa que é realmente possível escrever

Integer n = 9;

que é interpretado como

Integer n = Integer.valueOf(9);

3

Inteiro é uma classe / objeto de wrapper e int é do tipo primitivo. Essa diferença desempenha um papel enorme quando você deseja armazenar valores int em uma coleção, porque eles aceitam apenas objetos como valores (até jdk1.4). O JDK5 em diante por causa da caixa automática é uma história totalmente diferente.


5
O JDK5 + também aceita apenas objetos; é só que autoboxing permite que o compilador automaticamente chamar Integer.valueOf(i)ou Integer.intValue()para você. Collection<int>ainda não vai funcionar. Portanto, não é uma história totalmente diferente - é a mesma história, com apenas um pouco de taquigrafia.
yshavit

acordado. Desculpe, minha redação pode não refletir isso.
Kd

3

Em Java, int é um tipo de dados primitivo, enquanto Integer é uma classe Helper, é usado para converter um tipo de dado em outro.

Por exemplo:

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

Os tipos de dados primitivos armazenam a memória disponível mais rápida em que a classe Helper é complexa e armazenam na memória heap.

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


2

inté um tipo primitivo que representa um número inteiro. Considerando que Integeré um objeto que envolve int. O Integerobjeto oferece mais funcionalidades, como conversão para hex, string, etc.

Você também pode usar os conceitos de POO com Integer. Por exemplo, você pode usar Inteiro para genéricos (ou seja ).Collection<Integer>


2

Isto é retirado de Java: The Complete Reference, Nona Edição

Java usa tipos primitivos (também chamados de tipos simples), como int ou double , para manter os tipos de dados básicos suportados pela linguagem. Tipos primitivos , em vez de objetos, são usados ​​para essas quantidades em prol do desempenho . Usar objetos para esses valores adicionaria uma sobrecarga inaceitável até mesmo para os cálculos mais simples. Portanto, os tipos primitivos não fazem parte da hierarquia de objetos e não herdam Object .

Apesar do benefício de desempenho oferecido pelos tipos primitivos, há momentos em que você precisará de uma representação de objeto. Por exemplo, você não pode passar um tipo primitivo por referência a um método . Além disso, muitas das estruturas de dados padrão implementadas pelo Java operam em objetos, o que significa que você não pode usar essas estruturas de dados (específicas do objeto) para armazenar tipos primitivos . Para lidar com essas (e outras) situações, o Java fornece wrappers de tipo, que são classes que encapsulam um tipo primitivo dentro de um objeto.

As classes de wrapper se relacionam diretamente ao recurso de caixa automática do Java . Os wrappers de tipo são Duplo, Flutuante, Longo, Inteiro, Curto, Byte, Caractere e Booleano . Essas classes oferecem uma ampla variedade de métodos que permitem integrar totalmente os tipos primitivos na hierarquia de objetos do Java.


1

Para otimizar o tempo de execução do código Java, foram adicionados int tipos primitivos , incluindo etc. float, boolmas eles vêm com classes de wrapper para que, se necessário, você possa convertê-los e usá-los como objeto Java padrão, juntamente com muitos utilitários que são seus membros funções (como Integer.parseInt("1")).


1

inté um tipo de dados primitivo, enquanto Integeré um tipo de referência ou wrapper (classe) em Java.

Depois java 1.5disso, introduza o conceito de caixa automática e unboxing, você pode inicializar as duas coisas intou Integerassim.

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

por que Integer.parseInt("1");mas não int.parseInt("1");??

Integeré uma classe definida na jdkbiblioteca e parseInt()é um método estático pertence à Integerclasse

Então, Integer.parseInt("1");é possível em java. mas inté do tipo primitivo (assuma como uma palavra-chave) em java. Então, você não pode ligar parseInt()com int.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.