JavaでObjectをintにキャストする方法を教えてください。
このオブジェクトがInteger
であることが確実な場合は、
int i = (Integer) object;
あるいは、Java 7から始めて、次のように書くこともできます。
int i = (int) object;
注意してください、あなたのオブジェクトが ClassCastException
でない場合は Integer
、そうでなければ NullPointerException
がスローされます。オブジェクトはnull
です。
このようにして、あなたのオブジェクトは整数(ラップされたint)であると仮定し、あなたはそれをintにアンボックスします。
int
はプリミティブなので、Object
として格納することはできません。唯一の方法は、int
をInteger
と見なして/ボックス化してからObject
として格納することです。
あなたのオブジェクトがString
であれば、 Integer.valueOf()
メソッドを使って単純なintに変換することができます。
int i = Integer.valueOf((String) object);
オブジェクトが実際には整数を内容とするNumberFormatException
ではない場合、 String
をスローすることがあります。
リソース:
同じトピックについて:
オブジェクトがInteger
オブジェクトであると仮定すると、こうすることができます。
int i =((Integer)obj).intValue();
オブジェクトがInteger
オブジェクトではない場合は、型を検出してその型に基づいて変換する必要があります。
あなたのオブジェクトがInteger
であることが保証されているなら、これは簡単な方法です:
int x = (Integer)yourObject;
JavaではInteger
、Long
、BigInteger
などはすべてNumber
という名前のメソッドを持つ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によって変更できます。また、2つの生きているオブジェクトは同じアイデンティティハッシュを持つことができます。
object.hashCode()
を使うこともできますが、それは型固有のものにすることができます。
同じ場合、データベーステーブルの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
Javaでは、enumメンバは整数ではなくフル機能のオブジェクトです(たとえば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;
int i = (Integer) object; //Type is Integer.
int i = Integer.parseInt((String)object); //Type is String.
できません。 int
はObject
ではありません。
Integer
はObject
ですが、それがあなたの言いたいことではないでしょうか。
できません。 int
はオブジェクトではなく、プリミティブ型です。それをIntegerにキャストしてからintを得ることができます。
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
Object
がもともと Integer
としてインスタンス化されていた場合は、キャスト演算子(Subtype)
を使用して、それをint
にダウンキャストします。
Object object = new Integer(10);
int i = (Integer) object;
これは、少なくともJava 1.5で オートボクシング機能 を使用している場合にのみ機能します。それ以外の場合は、i
を次のように宣言する必要があります。代わりにInteger
を使用してからintValue()
を呼び出してください。
しかし、最初はInteger
として作成されていなかったのであれば、そのように見下すことはできません。メッセージ内の元のクラス名を持つClassCastException
が生成されます。 toString()
で得られるオブジェクトの String#valueOf()
表現が構文的に有効な整数を表す場合数値(例:数字のみ、必要に応じて前にマイナス記号を付けて)、そして Integer#valueOf()
または new Integer()
を使用できます。このため 。
Object object = "10";
int i = Integer.valueOf(String.valueOf(object));
CやC++で数値のようにオブジェクトポインタを操作できるのはなぜだろうが、Javaでオブジェクト参照を操作することはできません。
Javaのオブジェクト参照はCやC++のポインタとは異なります。基本的にポインタはの整数であり、他のint型のように操作できます。参照は意図的により具体的な抽象概念であり、ポインタのように操作することはできません。
int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
ArrayList list = null;
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'");
while (result.next()) {
list.add(result.getInt(1));
}
statement.close();
int id[] = new int[list.size()];
for (int i = 0; i < id.length; i++) {
try {
id[i] = ((Integer) list.get(i)).intValue();
} catch(NullPointerException ne) {
} catch(ClassCastException ch) {}
}
return id;
}
// enter code here
このコードは、なぜArrayList
が重要なのか、そしてなぜそれを使うのかを示しています。単にint
からObject
をキャストするだけです。その役に立つかもしれません。
Stringをintにキャストするという意味の場合は、Integer.valueOf("123")
を使用してください。
ただし、他のほとんどのオブジェクトはintにキャストできません。それらはint値を持たないからです。例えば。 XmlDocumentはint値を持ちません。
オブジェクト変数の例hastaId
Object hastaId = session.getAttribute("hastaID");
例オブジェクトをint型にキャストする、hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
map.getValue()はオブジェクトタイプを返すので、divide1 = me.getValue()/ 2;
int divide1 =(整数)me.getValue()/ 2;
このコードを参照してください。
public class sample
{
public static void main(String[] args)
{
Object obj=new Object();
int a=10,b=0;
obj=a;
b=(int)obj;
System.out.println("Object="+obj+"\nB="+b);
}
}