[java] 객체를 int로 캐스팅하는 방법

Java에서 Object를 int로 캐스팅하려면 어떻게해야합니까?



답변

이 객체가 Integer:

int i = (Integer) object;

또는 Java 7부터 다음과 같이 작성할 수 있습니다.

int i = (int) object;

, 그것은을 던질 수 조심 ClassCastException개체가없는 경우 Integer와를 NullPointerException개체 인 경우null .

이렇게하면 Object가 Integer (wrap)라고 가정하고 int로 unbox합니다.

int는 프리미티브이므로로 저장할 수 없으며 Object유일한 방법은로 int간주 하여 상자에 Integer넣은 다음로 저장하는 것 Object입니다.


객체가 인 경우 메소드를 String사용하여 Integer.valueOf()간단한 int로 변환 할 수 있습니다 .

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

NumberFormatException객체가 실제로 String정수로 내용 이 아닌 경우 를 던질 수 있습니다 .


자료 :

같은 주제에서 :


답변

객체가 Integer 다음을 수행 할 수 있습니다.

int i = ((정수) obj) .intValue ();

객체가 객체가 아닌 경우 Integer유형을 감지하고 유형에 따라 변환해야합니다.


답변

시나리오 1 : 간단한 사례

객체가 인 것을 보장하는 경우 Integer간단한 방법입니다.

int x = (Integer)yourObject;

시나리오 2 : 숫자 개체

자바에서는 Integer, Long, BigInteger등 모든 구현 Number라는 이름의 메소드가 인터페이스를 intValue. 수치 측면이있는 다른 모든 사용자 정의 유형도 구현해야합니다 Number(예 🙂 Age implements Number. 그래서 당신은 할 수 있습니다 :

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

시나리오 3 : 숫자 텍스트 구문 분석

명령 행 (또는 텍스트 필드 등)에서 사용자 입력을 받으면이 값을로받습니다 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());

시나리오 4 : ID 해시

Java에는 포인터가 없습니다. 그러나 Object에 대한 포인터와 같은 기본 구현 hashCode()이 있으며를 통해 직접 사용할 수 있습니다 System.identityHashCode(Object o). 그래서 당신은 할 수 있습니다 :

int x = System.identityHashCode(yourObject);

이것은 실제 포인터 값 이 아닙니다 . ID 해시가 유지되는 동안 JVM이 객체의 메모리 주소를 변경할 수 있습니다. 또한 두 개의 살아있는 객체는 동일한 ID 해시를 가질 수 있습니다.

을 사용할 수도 object.hashCode()있지만 유형별로 다를 수 있습니다.

시나리오 5 : 고유 색인

같은 경우 데이터베이스 테이블의 ID 값을 자동 증분하는 것과 같이 고유하지 않은 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

시나리오 6 : 열거 형 멤버

Java 열거 형 멤버는 정수가 아니라 완전한 기능을 갖춘 객체입니다 (예 : C / C ++과 달리). 아마도 enum 객체를로 변환 할 필요는 int없지만 Java는 색인 번호를 각 enum 멤버에 자동으로 연결합니다. 이 색인은 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로 변환하십시오.


답변

Integer (int의 래퍼 클래스)로 캐스팅해야합니다. 그런 다음 Integer의 intValue () 메서드를 사용하여 내부 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;