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


当前回答

我猜你想知道为什么C或c++允许像操作数字一样操作对象指针,但在Java中不能以同样的方式操作对象引用。

Java中的对象引用不像C或c++中的指针……指针基本上是整数,你可以像操作其他int一样操作它们。引用是一种更具体的抽象,不能像指针那样被操作。

其他回答

你不能。int不是Object。

虽然整数是一个对象,但我怀疑这是你的意思。

场景一:简单案例

如果它保证你的对象是一个Integer,这是一个简单的方法:

int x = (Integer)yourObject;

场景2:任何数字对象

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

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

场景3:解析数值文本

当你接受用户输入从命令行(或文本字段等),你得到它作为一个字符串。在这种情况下,您可以使用Integer。方法用于字符串(String):

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

如果你以Object形式获取输入,你可以使用(String)输入,或者,如果它可以有其他文本类型,则使用input. tostring ():

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

场景4:身份哈希

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

int x = System.identityHashCode(yourObject);

注意,这不是一个真正的指针值。对象的内存地址可以由JVM更改,同时保留它们的标识散列。另外,两个活动对象可以具有相同的标识哈希。

也可以使用object.hashCode(),但它可以是特定于类型的。

场景5:唯一索引

在同样的情况下,每个对象都需要一个唯一的索引,比如在数据库表中自动递增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:enum成员

在Java中,enum成员不是整数,而是全功能对象(例如,与C/ c++不同)。可能永远不需要将枚举对象转换为int,但是Java会自动将索引号与每个枚举成员关联起来。这个索引可以通过enumel .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型。

首先使用instanceof关键字进行检查。如果为真,则转换它。

int i = (Integer) object; //Type is Integer.

int i = Integer.parseInt((String)object); //Type is String.