如何将Object转换为int

时间:2010-09-07 18:15:37

标签: java object casting integer

如何在java中将对象强制转换为int?

19 个答案:

答案 0 :(得分:349)

如果您确定此对象是Integer

int i = (Integer) object;

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

int i = (int) object;

请注意,如果您的对象不是ClassCastException,则可以抛出Integer,如果您的对象是null,则可以投出NullPointerException

这样你就可以假设你的Object是一个整数(包装的int),然后你将它拆分成一个int。

int是一个原语,因此无法存储为Object,唯一的方法是将int视为Integer作为Object然后存储作为String


如果您的对象是int i = Integer.valueOf((String) object); ,那么您可以使用Integer.valueOf()方法将其转换为简单的int:

String

如果您的对象实际上不是以整数作为内容的{{1}},则可以抛出NumberFormatException


资源:

关于同一主题:

答案 1 :(得分:17)

假设对象是Integer对象,那么您可以这样做:

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

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

答案 2 :(得分:11)

场景1:简单案例

如果保证您的对象是Integer,则这是一种简单的方法:

int x = (Integer)yourObject;

场景2:任何数字对象

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

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

场景3:解析数字文本

当您从命令行(或文本字段等)接受用户输入时,您将其视为String。在这种情况下,您可以使用Integer.parseInt(String string)

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

如果您输入Object,则可以使用(String)input,或者,如果它可以使用其他文字类型input.toString()

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

场景4:身份哈希

在Java中没有指针。但是ObjecthashCode()的类似指针的默认实现,可以通过System.identityHashCode(Object o)直接使用。所以你可以:

int x = System.identityHashCode(yourObject);

请注意,这是真正的指针值。对象'内存地址可以由JVM更改,同时它们的标识哈希保持不变。此外,两个活动对象可以具有相同的标识哈希值。

您也可以使用object.hashCode(),但它可以是特定类型的。

场景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

场景6:枚举成员

在Java枚举中,成员不是整数,而是全功能对象(例如,与C / C ++不同)。可能永远不需要将枚举对象转换为int,但Java会自动将索引号与每个枚举成员相关联。可以通过Enum.ordinal()访问此索引,例如:

enum Foo { BAR, BAZ, QUX }

// ...

Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1

enter image description here

答案 3 :(得分:10)

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

正如您所看到的,这不是一种非常有效的方法。你只需要确定你拥有什么样的物体。然后以正确的方式将其转换为int。

答案 4 :(得分:4)

答案:

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

我在处理来自GSON的数据时使用单行代码:

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

答案 7 :(得分:2)

无法完成。 int不是对象,它是原始类型。你可以把它强制转换为Integer,然后得到int。

 Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class

 int num = i; //Java 1.5 or higher

答案 8 :(得分:2)

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

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

请注意,这仅适用于至少使用带有autoboxing feature的Java 1.5,否则您必须将i声明为Integer,然后再调用intValue()就可以了

但如果它最初根本没有被创建为Integer,那么你就不能那样贬低。这将导致ClassCastException在邮件中包含原始类名。如果toString()获得的对象的String#valueOf()表示表示语法上有效的整数(例如,只有数字,如果需要,前面带有减号),那么您可以使用Integer#valueOf()或{{ 3}}为此。

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

另见:

答案 9 :(得分:2)

int i = (Integer) object; //Type is Integer.

int i = Integer.parseInt((String)object); //Type is String.

答案 10 :(得分:2)

你做不到。 int不是Object

Integer虽然是Object,但我怀疑这就是你的意思。

答案 11 :(得分:1)

如果您的意思是将String转换为int,请使用Integer.valueOf("123")

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

答案 12 :(得分:1)

我猜你想知道为什么C或C ++允许你像数字一样操纵对象指针,但你不能以相同的方式操纵Java中的对象引用。

Java中的对象引用与C或C ++中的指针不同......指针基本上整数,你可以像任何其他int一样操纵它们。引用有意地是一个更具体的抽象,不能像指针那样被操纵。

答案 13 :(得分:1)

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很重要以及我们使用它的原因。只需从int投射Object。可能会有所帮助。

答案 14 :(得分:1)

For Example Object变量; hastaId

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

示例将对象强制转换为int hastaID

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

答案 15 :(得分:0)

参考此代码:

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

答案 16 :(得分:0)

map.getValue()返回对象类型 所以split1 = me.getValue()/ 2;

int除法1 =(整数)me.getValue()/ 2;

答案 17 :(得分:0)

最后,找到了适合您的规范的最佳实现。

public int tellMyNumber(Object any) {
    return 42;
}

答案 18 :(得分:-3)

首先检查instanceof关键字。如果是真的那么就把它扔掉。