Hoe kan ik een object casten naar een int in java?
Antwoord 1, autoriteit 100%
Als u zeker weet dat dit object een Integer
is:
int i = (Integer) object;
Of, vanaf Java 7, kunt u op equivalente wijze schrijven:
int i = (int) object;
Pas op, het kan een ClassCastException
als uw object geen Integer
en een NullPointerException
als uw object null
is.
Op deze manier ga je ervan uit dat je object een geheel getal is (de verpakte int) en pak je het uit in een int.
int
is een primitief, dus het kan niet worden opgeslagen als een Object
, de enige manier is om een int
in overweging te nemen/in een kader te plaatsen als een Integer
en vervolgens opgeslagen als een Object
.
Als uw object een String
is, kunt u de Integer.valueOf()
methode om het om te zetten in een eenvoudige int :
int i = Integer.valueOf((String) object);
Het kan een NumberFormatException
als uw object niet echt een String
is met een geheel getal als inhoud.
Bronnen:
Over hetzelfde onderwerp:
- Java: wat is het verschil tussen autoboxing en casten?
- Autoboxing : Dus ik kan schrijven: Integer i = 0; in plaats van: Integer i = new Integer(0);
- Converteer object naar primitieve int
Antwoord 2, autoriteit 5%
Scenario 1: eenvoudig geval
Als het gegarandeerd is dat uw object een Integer
is, is dit de eenvoudige manier:
int x = (Integer)yourObject;
Scenario 2: elk numeriek object
In Java Integer
, Long
, BigInteger
enz. implementeren ze allemaal de Number
-interface die een methode heeft met de naam intValue
. Alle andere aangepaste typen met een numeriek aspect moeten ook Number
implementeren (bijvoorbeeld: Age implements Number
). Dus je kunt:
int x = ((Number)yourObject).intValue();
Scenario 3: numerieke tekst ontleden
Als je gebruikersinvoer accepteert vanaf de opdrachtregel (of tekstveld enz.), krijg je het als een String
. In dit geval kunt u Integer.parseInt(String string)
gebruiken:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Als u invoer krijgt als Object
, kunt u (String)input
gebruiken, of, als het een ander teksttype kan hebben, input.toString()
:
int x = Integer.parseInt(input.toString());
Scenario 4: identiteitshash
In Java zijn er geen pointers. Object
heeft echter een pointer-achtige standaardimplementatie voor hashCode()
, die direct beschikbaar is via System.identityHashCode(Object o)
. Dus je kunt:
int x = System.identityHashCode(yourObject);
Merk op dat dit geeneen echte pointerwaarde is. Het geheugenadres van objecten kan door de JVM worden gewijzigd terwijl hun identiteitshashes behouden blijven. Ook kunnen twee levende objecten dezelfde identiteitshash hebben.
U kunt ook object.hashCode()
gebruiken, maar dit kan typespecifiek zijn.
Scenario 5: unieke index
In dezelfde gevallen heb je een unieke index nodig voor elk object, zoals het automatisch verhogen van ID-waarden in een databasetabel (en in tegenstelling tot identiteitshash die niet uniek is). Een eenvoudige voorbeeldimplementatie hiervoor:
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;
}
}
}
Gebruik:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Scenario 6: enum lid
In Java zijn enum-leden geen gehele getallen maar objecten met volledige functionaliteit (in tegenstelling tot bijvoorbeeld C/C++). Waarschijnlijk is het nooit nodig om een enum-object te converteren naar int
, maar Java koppelt automatisch een indexnummer aan elk enum-lid. Deze index is toegankelijk via Enum.ordinal()
, bijvoorbeeld:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Antwoord 3, autoriteit 4%
Ervan uitgaande dat het object een Integer
object is, kunt u dit doen:
int i = ((Integer) obj).intValue();
Als het object geen Integer
-object is, moet u het type detecteren en het converteren op basis van het type.
Antwoord 4, autoriteit 3%
@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");
}
}
Zoals je kunt zien, is dit geen zeer efficiënte manier om het te doen. Je moet gewoon zeker zijn van wat voor soort object je hebt. Converteer het vervolgens naar een int de juiste manier.
5
Je moet het naar een integer (int’s wrapper klasse) werpen. U kunt vervolgens de methode van intgalue () van intgaliën () gebruiken om de innerlijke int.
te verkrijgen
6
Antwoord:
int i = ( Integer ) yourObject;
Als, uw object al een geheel getal is, zal het soepel verlopen. IE:
Object yourObject = 1;
// cast here
of
Object yourObject = new Integer(1);
// cast here
enz.
Als uw object iets anders is, moet u het eerst (indien mogelijk) converteren naar een INT eerst:
String s = "1";
Object yourObject = Integer.parseInt(s);
// cast here
of
String s = "1";
Object yourObject = Integer.valueOf( s );
// cast here
7
Ik gebruik een one-liner bij het verwerken van gegevens van GSON:
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
8
int i = (Integer) object; //Type is Integer.
int i = Integer.parseInt((String)object); //Type is String.
9
kan niet worden gedaan. Een int
is geen object, het is een primitief type. Je kunt het naar integer laten werpen en dan de int.
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
Antwoord 10
Dat kan niet. Een int
is geen Object
.
Integer
is echter een Object
, maar ik betwijfel of je dat bedoelt.
Antwoord 11
Als je een string naar int wilt casten, gebruik dan Integer.valueOf("123")
.
Je kunt de meeste andere objecten echter niet casten naar int, omdat ze geen int-waarde hebben. bijv. een XmlDocument heeft geen int-waarde.
Antwoord 12
Ik denk dat je je afvraagt waarom je in C of C++ een objectaanwijzer als een getal kunt manipuleren, maar je kunt een objectreferentie in Java niet op dezelfde manier manipuleren.
Objectverwijzingen in Java zijn niet zoals aanwijzers in C of C++… Aanwijzers zijn in feite zijngehele getallen en je kunt ze manipuleren zoals elke andere int. Verwijzingen zijn opzettelijk een meer concrete abstractie en kunnen niet worden gemanipuleerd zoals verwijzingen dat kunnen.
Antwoord 13
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
Deze code laat zien waarom ArrayList
belangrijk is en waarom we deze gebruiken. Gewoon int
casten vanuit Object
. Misschien is het nuttig.
Antwoord 14
Bijvoorbeeld Objectvariabele; hastaID
Object hastaId = session.getAttribute("hastaID");
Bijvoorbeeld een object casten naar een int,hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
Antwoord 15
Zie deze code:
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);
}
}
Antwoord 16
so divide1=me.getValue()/2;
int divide1 = (Integer) me.getValue()/2;
Antwoord 17
Eindelijk is de beste implementatie voor uw specificatie gevonden.
public int tellMyNumber(Object any) {
return 42;
}
Antwoord 18
controleer eerst met instanceof keyword . indien waar, cast het dan.