如何将对象强制转换为整型

2022-08-31 05:33:35

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


答案 1

如果您确定此对象是 :Integer

int i = (Integer) object;

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

int i = (int) object;

请注意,如果您的对象不是整数,它可以抛出ClassCastException,如果您的对象是.,它可以抛出NullPointerExceptionnull

这样,您就假定对象是整数(包装的 int),并将其拆箱到 int 中。

int是一个基元,所以它不能存储为 ,唯一的方法是将一个 consider/boxed 作为一个 然后存储为 .ObjectintIntegerObject


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

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

它可以抛出一个NumberFormatException,如果你的对象不是一个真正以整数作为内容的对象。String


资源:

关于同一主题:


答案 2

场景一:简单案例

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

int x = (Integer)yourObject;

方案 2:任何数字对象

在Java中,等都实现了具有名为 .任何其他具有数值方面的自定义类型也应实现(例如:)。因此,您可以:IntegerLongBigIntegerNumberintValueNumberAge implements Number

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

方案 3:解析数字文本

当您接受来自命令行(或文本字段等)的用户输入时,您将获得.在这种情况下,您可以使用:StringInteger.parseInt(String string)

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

如果输入为 ,则可以使用 ,或者,如果它可以具有其他文本类型,则可以:Object(String)inputinput.toString()

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

方案 4:标识哈希

在Java中没有指针。但是,有一个类似指针的默认实现 ,可通过 直接通过 获得。因此,您可以:ObjecthashCode()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

方案 6:枚举成员

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

enum Foo { BAR, BAZ, QUX }

// ...

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

enter image description here