如何在 java 中将对象转换为 int?
原文由 Sheehan Alam 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果保证您的对象是 Integer
,这是简单的方法:
int x = (Integer)yourObject;
In Java Integer
, Long
, BigInteger
etc. all implement the Number
interface which has a method named 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<>();
// 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
原文由 Dávid Horváth 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
如果您确定此对象是
Integer
:或者,从 Java 7 开始,您可以等效地编写:
Beware, it can throw a
ClassCastException
if your object isn’t anInteger
and aNullPointerException
if your object isnull
.这样你就假设你的对象是一个整数(包装的 int)并且你将它拆箱成一个 int。
int
is a primitive so it can’t be stored as anObject
, the only way is to have anint
considered/boxed as anInteger
然后存储为Object
。如果您的对象是
String
,那么您可以使用Integer.valueOf()
方法将其转换为简单的 int :它可以抛出一个
NumberFormatException
如果你的对象不是真正的String
一个整数作为内容。资源 :
关于同一主题: