如何将一个对象转换为一个int在java中?

我怎样才能把一个对象在Java中的int?

如果你确定这个对象是一个Integer

 int i = (Integer) object; 

或者,从Java 7开始,您可以等效地编写:

 int i = (int) object; 

要小心,如果你的对象不是一个Integer ,它可以抛出一个ClassCastException如果你的对象为null ,它可以抛出一个NullPointerException ClassCastException

这样你就可以假定你的Object是一个Integer(包装的int),你可以将它解包到一个int中。

int是一个基元,所以它不能被存储为一个Object ,唯一的方法是将int视为一个Integer然后将其作为Object存储起来。


如果你的对象是一个String ,那么你可以使用Integer.valueOf()方法将它转换成一个简单的int:

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

如果你的对象实际上不是一个带整数的String作为内容,它可以抛出一个NumberFormatException


资源:

  • Oracle.com – 自动装箱
  • Oracle.com – 基本数据types

在同一主题上:

  • Java:自动装箱和铸造有什么区别?
  • 自动装箱:所以我可以写:Integer i = 0; 而不是:Integer i = new Integer(0);
  • 将对象转换为原始的int

假设对象是一个Integer对象,那么你可以这样做:

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

如果对象不是Integer对象,则必须检测该types并根据其types进行转换。

 @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"); } } 

正如你所看到的,这不是一个非常有效的方法。 你只需要确定你有什么样的对象。 然后将其转换为正确的方式。

情况1:简单情况

如果保证你的对象是一个Integer ,这是简单的方法:

 int x = (Integer)yourObject; 

情景2:任何数字对象

在Java IntegerLongBigInteger等中都实现了Number接口,它有一个名为intValue的方法。 任何其他具有数字方面的自定义types也应实现Number (例如: Age implements Number )。 所以你可以:

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

场景3:parsing数字文本

当你接受来自命令行(或文本字段等)的用户input时,你会得到它作为一个String 。 在这种情况下,你可以使用Integer.parseInt(String string)

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

如果以Object获得input,则可以使用(String)input ,或者如果可以使用其他文本types,则使用input.toString()

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

场景4:身份哈希

在Java中没有指针。 但是Object有一个hashCode()的类似指针的默认实现,它可以通过System.identityHashCode(Object o)直接获得。 所以你可以:

 int x = System.identityHashCode(yourObject); 

请注意,这不是一个真正的指针值。 对象的内存地址可以由JVM在其身份散列保持不变的情况下进行更改。 另外,两个活动对象可以具有相同的身份散列。

你也可以使用object.hashCode() ,但它可以是types特定的。

情景5:唯一索引

在相同的情况下,每个对象都需要一个唯一的索引,例如在数据库表中自动增加ID值(与不唯一的身份哈希不同)。 这是一个简单的示例实现:

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

用法:

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

在这里输入图像说明

你必须将其转换为Integer(int的包装类)。 然后可以使用Integer的intValue()方法来获取内部int。

回答:

 int i = ( Integer ) yourObject; 

如果,你的对象已经是一个整数,它会顺利运行。 即:

 Object yourObject = 1; // cast here 

要么

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

等等

如果你的对象是其他东西,你需要先将它(如果可能)转换为int:

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

要么

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

从GSON处理数据时,我使用一行代码:

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

如果Object最初被实例化为Integer ,则可以使用cast操作符(Subtype)将其向下转换为int

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

请注意,这只适用于至less使用具有自动装箱function的 Java 1.5的情况,否则您必须声明为Integer ,然后调用intValue()

但是,如果它最初不是作为一个Integer创build的,那么你不能像这样低调。 这将导致ClassCastException与消息中的原始类名称。 如果通过String#valueOf()获得的对象的toString()表示forms表示一个语法上有效的整数(例如数字,如果必要的话前面带有减号),那么可以使用Integer#valueOf()new Integer()为了这。

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

也可以看看:

  • inheritance和铸造教程
 int i = (Integer) object; //Type is Integer. int i = Integer.parseInt((String)object); //Type is String. 

无法完成。 int不是一个对象,它是一个原始types。 你可以把它转换成Integer,然后得到int。

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

你不能。 一个int不是一个Object

Integer是一个Object ,但我怀疑这就是你的意思。

如果你的意思是将一个string转换为int,使用Integer.valueOf("123")

你不能把大多数其他对象转换为int,因为它们不会有一个int值。 例如一个XmlDocument没有int值。

我想你想知道为什么C或C ++可以让你像对待一个数字一样操作一个对象指针,但是你不能用同样的方法操作Java中的对象引用。

Java中的对象引用不像C或C ++中的指针…指针基本上整数,您可以像处理其他任何int一样操纵它们。 引用是故意更具体的抽象,不能用指针的方式操纵。

 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 

这段代码显示了为什么ArrayList是重要的,为什么我们使用它。 从Object简单地铸造int 。 可能是它的帮助。

请参考此代码:

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

对于示例对象variables; hastaId

Object hastaId = session.getAttribute(“hastaID”);


示例将一个对象转换为int, hastaID

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

首先检查instanceof关键字。 如果是真的,那就施放它。