Como converter um object em um int

Como posso converter um object para um int em java?

Se você tem certeza de que este object é um Integer :

 int i = (Integer) object; 

Ou, a partir do Java 7, você pode escrever de forma equivalente:

 int i = (int) object; 

Cuidado, ele pode lançar um ClassCastException se seu object não for um Integer e um NullPointerException se seu object for null .

Desta forma você assume que o seu object é um Integer (o int empacotado) e você unbox ele em um int.

int é um primitivo, portanto, não pode ser armazenado como um Object , a única maneira é ter um int considerado / empacotado como um Integer seguida, armazenado como um Object .


Se o seu object é um String , então você pode usar o método Integer.valueOf() para convertê-lo em um int simples:

 int i = Integer.valueOf((String) object); 

Ele pode lançar um NumberFormatException se seu object não for realmente uma String com um inteiro como conteúdo.


Recursos :

  • Oracle.com – Autoboxing
  • Oracle.com – tipos de dados primitivos

No mesmo tópico:

  • Java: Qual a diferença entre autoboxing e casting?
  • Autoboxing: Então eu posso escrever: Integer i = 0; em vez de: Integer i = new Integer (0);
  • Converter object em int primitiva

Assumindo que o object é um object Integer , você pode fazer isso:

 int i = ((Integer) obj) .intValue ();

Se o object não for um object Integer , você precisará detectar o tipo e convertê-lo com base em seu tipo.

Cenário 1: caso simples

Se é garantido que seu object é um Integer , esta é a maneira mais simples:

 int x = (Integer)yourObject; 

Cenário 2: qualquer object numérico

Em Java Integer , Long , BigInteger , etc. todos implementam a interface Number que possui um método chamado intValue . Quaisquer outros tipos personalizados com um aspecto numérico também devem implementar o Number (por exemplo: Age implements Number ). Então você pode:

 int x = ((Number)yourObject).intValue(); 

Cenário 3: analisar texto numérico

Quando você aceita a input do usuário da linha de comando (ou campo de texto, etc.), você a obtém como uma String . Nesse caso, você pode usar Integer.parseInt(String string) :

 String input = someBuffer.readLine(); int x = Integer.parseInt(input); 

Se você receber input como Object , poderá usar a (String)input ou, se ela puder ter outro tipo textual, input.toString() :

 int x = Integer.parseInt(input.toString()); 

Cenário 4: hash de identidade

Em Java não há pointers. No entanto, Object tem uma implementação padrão semelhante a ponteiro para hashCode() , que está diretamente disponível via System.identityHashCode(Object o) . Então você pode:

 int x = System.identityHashCode(yourObject); 

Note que este não é um valor real do ponteiro. O endereço de memory dos objects pode ser alterado pela JVM enquanto seus hashes de identidade estão sendo mantidos. Além disso, dois objects vivos podem ter o mesmo hash de identidade.

Você também pode usar object.hashCode() , mas pode ser específico do tipo.

Cenário 5: índice exclusivo

Nos mesmos casos, você precisa de um índice exclusivo para cada object, como valores de ID auto-incrementados em uma tabela de database (e, ao contrário do hash de identidade, que não é exclusivo). Uma implementação de amostra simples para isso:

 class ObjectIndexer { private int index = 0; private Map map = new WeakHashMap<>(); public int indexFor(Object object) { if (map.containsKey(object)) { return map.get(object); } else { index++; map.put(object, index); return index; } } } 

Uso:

 ObjectIndexer indexer = new ObjectIndexer(); int x = indexer.indexFor(yourObject); // 1 int y = indexer.indexFor(new Object()); // 2 int z = indexer.indexFor(yourObject); // 1 

Cenário 6: membro da enum

Em membros enum Java não são inteiros, mas objects completos (ao contrário de C / C ++, por exemplo). Provavelmente, nunca é necessário converter um object enum em int , no entanto, o Java associa automaticamente um número de índice a cada membro enum. Este índice pode ser acessado via Enum.ordinal() , por exemplo:

 enum Foo { BAR, BAZ, QUX } // ... Object baz = Foo.BAZ; int index = ((Enum)baz).ordinal(); // 1 

insira a descrição da imagem aqui

 @Deprecated public static int toInt(Object obj) { if (obj instanceof String) { return Integer.parseInt((String) obj); } else if (obj instanceof Number) { return ((Number) obj).intValue(); } else { String toString = obj.toString(); if (toString.matches("-?\d+")) { return Integer.parseInt(toString); } throw new IllegalArgumentException("This Object doesn't represent an int"); } } 

Como você pode ver, esta não é uma maneira muito eficiente de fazer isso. Você simplesmente tem que ter certeza de que tipo de object você tem. Em seguida, converta-o para um int no caminho certo.

Você tem que lançá-lo para um Integer (class wrapper int). Você pode então usar o método intValue () do Integer para obter o int interno.

Responda:

 int i = ( Integer ) yourObject; 

Se, seu object já é um inteiro, ele será executado sem problemas. ie:

 Object yourObject = 1; // cast here 

ou

 Object yourObject = new Integer(1); // cast here 

etc.

Se o seu object é qualquer outra coisa, você precisaria convertê-lo (se possível) para um int primeiro:

 String s = "1"; Object yourObject = Integer.parseInt(s); // cast here 

Ou

 String s = "1"; Object yourObject = Integer.valueOf( s ); // cast here 

Eu uso um one-liner ao processar dados do GSON:

 int i = object != null ? Double.valueOf(object.toString()).intValue() : 0; 

Se o Object foi originalmente instanciado como um Integer , então você pode downcast para um int usando o operador cast (Subtype) .

 Object object = new Integer(10); int i = (Integer) object; 

Observe que isso só funciona quando você está usando pelo menos o Java 1.5 com o recurso de checkbox automática , caso contrário, você terá que declarar i como Integer e, em seguida, chamar intValue() .

Mas se inicialmente não foi criado como um Integer , então você não pode diminuir assim. Isso resultaria em um ClassCastException com o nome da class original na mensagem. Se a representação toString() do object obtida por String#valueOf() indicar um número inteiro sintaticamente válido (por exemplo, apenas dígitos, se necessário com um sinal de menos na frente), você poderá usar Integer#valueOf() ou new Integer() por esta.

 Object object = "10"; int i = Integer.valueOf(String.valueOf(object)); 

Veja também:

  • Tutorial de inheritance e transmissão
 int i = (Integer) object; //Type is Integer. int i = Integer.parseInt((String)object); //Type is String. 

Não pode ser feito. Um int não é um object, é um tipo primitivo. Você pode convertê-lo em Integer e, em seguida, obter o int.

  Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class int num = i; //Java 1.5 or higher 

Você não pode. Um int não é um Object .

Integer é um Object , mas duvido que você esteja falando.

Se você quer dizer uma string para int, use Integer.valueOf("123") .

Você não pode converter a maioria dos outros objects para int, porque eles não terão um valor int. Por exemplo, um XmlDocument não tem valor int.

Eu acho que você está se perguntando por que C ou C ++ permite manipular um ponteiro de object como um número, mas você não pode manipular uma referência de object em Java da mesma maneira.

Referências de objects em Java não são como pointers em C ou C ++ … Ponteiros basicamente são inteiros e você pode manipulá-los como qualquer outro int. Referências são intencionalmente uma abstração mais concreta e não podem ser manipuladas da maneira que os pointers conseguem.

 int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException { ArrayList list = null; Statement statement = conn.createStatement(); ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'"); while (result.next()) { list.add(result.getInt(1)); } statement.close(); int id[] = new int[list.size()]; for (int i = 0; i < id.length; i++) { try { id[i] = ((Integer) list.get(i)).intValue(); } catch(NullPointerException ne) { } catch(ClassCastException ch) {} } return id; } // enter code here 

Este código mostra porque o ArrayList é importante e porque o usamos. Simplesmente lançando int do Object . Pode ser útil.

Consulte este código:

 public class sample { public static void main(String[] args) { Object obj=new Object(); int a=10,b=0; obj=a; b=(int)obj; System.out.println("Object="+obj+"\nB="+b); } } 

Por exemplo, variável de object; hastaId

 Object hastaId = session.getAttribute("hastaID"); 

Por exemplo, casting de um object para um int, hastaID

 int hastaID=Integer.parseInt(String.valueOf(hastaId)); 

primeiro verifique com instanceof keyword. Se for verdade, em seguida, lançá-lo.

Intereting Posts