在Java中,我如何将一个对象强制转换为int类型?
如果您确定该对象是一个整数
:
int i = (Integer) object;
或者,从Java 7开始,您可以等效地编写:
int i = (int) object;
Integer
,它可能会抛出ClassCastException
,如果您的对象为null
,它可能会抛出NullPointerException
。int
是原始类型,因此无法存储为Object
,唯一的方法是将一个int
视为Integer
并存储为Object
。
String
,那么您可以使用Integer.valueOf()
方法将其转换为简单的int类型:int i = Integer.valueOf((String) object);
如果您的对象不是一个包含整数内容的String
,它可能会抛出一个NumberFormatException
异常。
资源:
相关主题:
Integer
拆箱为int
时,会发生NullPointerException
。 - Colin Hebert如果你可以保证你的对象是一个 Integer
,这是一种简单的方式:
int x = (Integer)yourObject;
int x = ((Number)yourObject).intValue();
当您从命令行(或文本字段等)接受用户输入时,您会将其作为一个String
获取。在这种情况下,您可以使用Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Object
,则可以使用(String)input
,或者如果它可以具有其他文本类型,则可以使用input.toString()
:(String)input
进行转换,或者如果它可能有其他文本类型,则可以使用input.toString()
进行转换。int x = Integer.parseInt(input.toString());
Java语言中没有指针。然而,Object
类有一种类似指针的默认实现方式,可以通过System.identityHashCode(Object o)
方法来直接获取hashCode()
值。因此,您可以:
int x = System.identityHashCode(yourObject);
请注意,这不是一个真正的指针值。对象的内存地址可以被JVM更改,而它们的身份哈希值保持不变。此外,两个活动对象可能具有相同的身份哈希值。
您还可以使用object.hashCode()
,但它可能是特定类型的。
在某些情况下,您需要为每个对象设置唯一索引,例如自动递增ID值的数据库表(与不唯一的身份哈希值不同)。以下是一个简单的示例实现:
class ObjectIndexer {
private int index = 0;
private Map<Object, Integer> map = new WeakHashMap<>();
// or:
// new WeakIdentityHashMap<>();
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
在Java中,枚举成员不是整数,而是完整的对象(与C/C++不同)。可能永远不需要将枚举对象转换为int
,但是Java会自动为每个枚举成员关联一个索引号。此索引可以通过Enum.ordinal()
访问,例如:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Integer
对象,你可以这样做:
int i = ((Integer) obj).intValue();如果该对象不是
Integer
对象,则必须检测类型并基于其类型进行转换。intValue
,因为自动装箱会为您调用它。 - OscarRyzintValue
更清晰,特别是考虑到初学者容易混淆 int
和 Integer
可互换的情况。 - Steve Kuo@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 i = ( Integer ) yourObject;
如果你的对象已经是一个整数,那么它将会顺利运行。例如:
Object yourObject = 1;
// cast here
或者
Object yourObject = new Integer(1);
// cast here
如果您的对象不是整数,您需要先将它(如果可能)转换为整数:
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;
您需要将其转换为整数(int的包装类)。然后,您可以使用Integer的intValue()方法获取内部int。
hastaId
Object hastaId = session.getAttribute("hastaID");
hastaID
。int hastaID=Integer.parseInt(String.valueOf(hastaId));
Object
最初被实例化为Integer
,那么您可以使用强制类型转换运算符(Subtype)
将其向下转换为int
。Object object = new Integer(10);
int i = (Integer) object;
i
声明为Integer
,然后调用intValue()
。Integer
创建的,那么你就不能像那样向下转换。这将导致一个ClassCastException
,其中包含原始类名的消息。如果对象的toString()
表示形式(由String#valueOf()
获得)表示为语法上有效的整数数字(例如仅使用数字,必要时前面带有减号),则可以使用Integer#valueOf()
或new Integer()
。Object object = "10";
int i = Integer.valueOf(String.valueOf(object));
int i = (Integer) object; //Type is Integer.
int i = Integer.parseInt((String)object); //Type is String.
intValue
),为枚举创建一个设置intValue
的构造函数,让枚举常量调用该构造函数,并添加一个获取器以获取intValue
。然后,不要进行强制转换,而是调用获取器。 - Brian McCutchon