如何在Java中将对象转换为int?
intValue
),为枚举创建一个构造函数以设置intValue
,让您的枚举常量调用该构造函数,并添加一个吸气剂为intValue
。然后,不进行强制转换,而是调用getter。
如何在Java中将对象转换为int?
intValue
),为枚举创建一个构造函数以设置intValue
,让您的枚举常量调用该构造函数,并添加一个吸气剂为intValue
。然后,不进行强制转换,而是调用getter。
Answers:
如果您确定该对象是Integer
:
int i = (Integer) object;
或者,从Java 7开始,您可以等效地编写:
int i = (int) object;
当心,它可以抛出一个ClassCastException
,如果你的对象是不是Integer
和NullPointerException
你要的对象是null
。
这样,您假设您的对象是一个整数(包装的int),然后将其拆箱为一个int。
int
是基元,因此无法将其存储为Object
,唯一的方法是将“ int
考虑/装箱”为,Integer
然后存储为Object
。
如果您的对象是String
,则可以使用Integer.valueOf()
方法将其转换为简单的int:
int i = Integer.valueOf((String) object);
NumberFormatException
如果您的对象不是真正的a String
,并且内容为整数,则可能会引发a 。
资源:
在同一主题上:
NullPointerException
会在拆箱的发生Integer
成int
如果可以确保您的对象是Integer
,则这是简单的方法:
int x = (Integer)yourObject;
在Java中Integer
,Long
,BigInteger
等一切落实Number
其中有一个名为方法接口intValue
。具有数字方面的任何其他自定义类型也应实现Number
(例如:)Age implements Number
。这样你就可以:
int x = ((Number)yourObject).intValue();
当您从命令行(或文本字段等)接受用户输入时,将其作为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());
在Java中没有指针。但是Object
有一个类似指针的默认实现hashCode()
,可以通过直接获得System.identityHashCode(Object o)
。这样你就可以:
int x = System.identityHashCode(yourObject);
请注意,这不是真正的指针值。JVM可以更改对象的内存地址,同时保留其身份哈希值。同样,两个活动对象可以具有相同的身份哈希。
您也可以使用object.hashCode()
,但是它可以是特定于类型的。
在相同的情况下,您需要为每个对象都有唯一的索引,例如自动增加数据库表中的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
在Java中,枚举成员不是整数,而是功能齐全的对象(例如,不同于C / C ++)。可能永远不需要将枚举对象转换为int
,但是Java自动将索引号关联到每个枚举成员。可以通过访问该索引Enum.ordinal()
,例如:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
@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格式。
回答:
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
,则可以使用强制转换int
运算符将其向下转换为(Subtype)
。
Object object = new Integer(10);
int i = (Integer) object;
需要注意的是,当你的Java 1.5至少使用这仅适用自动装箱功能,否则你必须声明i
作为Integer
代替,然后调用intValue()
就可以了。
但是,如果最初根本不是将其创建的Integer
,那么您就不能像这样沮丧。它将导致在ClassCastException
消息中使用原始类名。如果toString()
通过获得的对象表示形式String#valueOf()
表示语法上有效的整数(例如,仅数字,如果需要,请在前面带有减号),则可以为此使用Integer#valueOf()
或new Integer()
。
Object object = "10";
int i = Integer.valueOf(String.valueOf(object));
不能做 An int
不是对象,而是原始类型。您可以将其转换为Integer,然后获取int。
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
你不能 An int
不是一个Object
。
Integer
是的Object
,虽然,但我怀疑这是你的意思。
如果您的意思是将String强制转换为int,请使用Integer.valueOf("123")
。
但是,您不能将大多数其他对象强制转换为int,因为它们将没有int值。例如,XmlDocument没有int值。
Integer.valueOf("123")
,如果你需要的是一个原始的,而不是使用Integer.parseInt("123")
,因为的valueOf方法会导致不必要的拆箱。
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
。可能会有所帮助。
so divide1=me.getValue()/2;
int divide1 = (Integer) me.getValue()/2;
最后,找到了适合您的规范的最佳实现。
public int tellMyNumber(Object any) {
return 42;
}
Object
不是Integer
,我不确定您对演员表的期望。