如何将Object转换为int

She*_*lam 205 java integer casting object

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

Col*_*ert 366

如果你确定这个对象是Integer:

int i = (Integer) object;
Run Code Online (Sandbox Code Playgroud)

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

int i = (int) object;
Run Code Online (Sandbox Code Playgroud)

当心,它可以抛出一个ClassCastException如果你的对象不是一个Integer,NullPointerException如果你的对象是null.

这样您就可以假设您的Object是一个Integer(包装的int),然后将其拆分为int.

int是一个原始的,所以它不能存储为Object,唯一的方法是将一个int考虑/盒装作为一个Integer然后存储为Object.


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

int i = Integer.valueOf((String) object);
Run Code Online (Sandbox Code Playgroud)

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


资源:

在同一主题上:

  • 在将`Integer`拆箱到`int`期间,会出现`NullPointerException` (7认同)

Eri*_*son 18

假设对象是一个Integer对象,那么你可以这样做:

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

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


Mar*_*aux 12

@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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Dáv*_*áth 11

场景1:简单案例

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

int x = (Integer)yourObject;
Run Code Online (Sandbox Code Playgroud)

场景2:任何数字对象

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

int x = ((Number)yourObject).intValue();
Run Code Online (Sandbox Code Playgroud)

场景3:解析数字文本

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

String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Run Code Online (Sandbox Code Playgroud)

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

int x = Integer.parseInt(input.toString());
Run Code Online (Sandbox Code Playgroud)

场景4:身份哈希

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

int x = System.identityHashCode(yourObject);
Run Code Online (Sandbox Code Playgroud)

请注意,这不是真正的指针值.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;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

用法:

ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject);    // 1
int y = indexer.indexFor(new Object());  // 2
int z = indexer.indexFor(yourObject);    // 1
Run Code Online (Sandbox Code Playgroud)

场景6:枚举成员

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

enum Foo { BAR, BAZ, QUX }

// ...

Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述