Object oder Primitiv

D

DontKnowJava

Gast
Hallo,

ich habe zu dem Thema bereits im WWW und hier im Forum gesucht, bin aber nicht so richtig schlau aus dem Gefundenen geworden. Die Frage mag eher von theoretischem Interesse sein, ich brauche aber Antworten auf so etwas, damit ich die Sprache besser begreifen kann - mag komisch sein, ich weiß ;-)

Wie kann ich feststellen ob eine Variable ein Objekt oder Primitiv ist?
So etwas wie

System.out.println(wert.getClass());
boolean isMyObject = (wert instanceof String);


funktioniert ja nur bei Objekten und führt ansonsten zu einem Fehler :-(
Mit einer Exception zu arbeiten halte ich für unsauber und etwas anderes fällt mir nicht ein :-(

Wie kann ich also feststellen ob es sich um ein Objekt oder einen primitiven Wert handelt?
 
D

DontKnowJava

Gast
Hallo, vielen Dank für die schnelle Antwort.

Etwas naiv habe ich es so ausprobiert.
Code:
		int wert = 1;		
		System.out.println(wert.isPrimitive());

Eclipse mag das aber nicht (soll nichts heißen, mich mag Eclipse auch nicht ;-) ):
"Cannot invoke isPrimitive() on the primitive type int"

Was habe ich vergessen oder übersehen? Muss ich die Variable erst einer Art künstlichem Objekt übergeben?
 

jgh

Top Contributor
wenn dir bei eclipse keine Methoden angeboten werden, ist die Variable ein primitiver Datentyp...werden die Methoden bei eclipse angeboten (Strg+Leertaste) ist es ein Objekt.

Java:
 int i= 4;
i.//Strg+Leertaste => keine Angebote an Methoden => kein Objekt
Integer ii = new Integer(i);
ii.//Strg+Leertaste => Angebote an Methoden => Objekt
 
D

DontKnowJava

Gast
wenn dir bei eclipse keine Methoden angeboten werden, ist die Variable ein primitiver Datentyp...werden die Methoden bei eclipse angeboten (Strg+Leertaste) ist es ein Objekt.

Der Compiler meckert es natürlich genauso an, erfahrungsgemäß brauche ich den aber gar nicht anwerfen wenn Eclipse bereits etwas moniert.

Vielleicht um die Motivation meiner Frage besser verstehen zu können: Ich komme von Sprachen wie Perl oder PHP. Dort bekomme ich oft von anderen "Systemen" Daten geliefert und muss den Typ feststellen, logisch auf Gültigkeit überprüfen, etc.

Ich will im Programm zur Laufzeit feststellen/ abfragen ob eine Variable ein Objekt ist oder einen primitiven Datentyp hat (int, char, etc.).

Das mag möglicherweise in Java keine so große Rolle spielen, wäre für mich aus Verständnisgründen aber ganz wichtig das zu wissen.
 

Illuvatar

Top Contributor
In Java steht aber bereits zur Compilezeit fest, ob eine Variable ein Primitiv oder ein Objekt ist. Deshalb gibt es da auch keine Möglichkeiten, das abzufragen, weil das keinen Sinn machen würde.
Nur in bestimmten Spezialfällen wie Reflection kann mal etwas ähnliches nötig sein, daher die genannte [c]isPrimitive[/c] Methode. Im Normalfall ist diese aber auch nicht anwendbar, da der Compiler eben weiß, dass da kein Objekt ist, und man sich davon also auch keine Klasse o.ä. anschauen kann.
 

TKausL

Top Contributor
Ich verstehe das Problem auch nicht. Wenn du "von anderen Systemen" Daten geliefert bekommst, weißt du doch schon, welchen Typ die Methode zurück gibt. Bei PHP ist es ja so, dass Jede Variable jeden Datentyp enthalten kann, dafür gibt es ja dann auch Funktionen wie is_numeric und co. Bei Java ist das aber nicht nötig.
 
D

DontKnowJava

Gast
In Java steht aber bereits zur Compilezeit fest, ob eine Variable ein Primitiv oder ein Objekt ist. Deshalb gibt es da auch keine Möglichkeiten, das abzufragen, weil das keinen Sinn machen würde.
Nur in bestimmten Spezialfällen wie Reflection kann mal etwas ähnliches nötig sein, daher die genannte [c]isPrimitive[/c] Methode. Im Normalfall ist diese aber auch nicht anwendbar, da der Compiler eben weiß, dass da kein Objekt ist, und man sich davon also auch keine Klasse o.ä. anschauen kann.

Ah, ich glaube ich beginne zu verstehen.
Ich komme gar nicht in die Verlegenheit auf Primitive zu testen, da ich intern wohl nur mit Objekten arbeite, die höchstens ihrerseits mit externen Daten (Primitiven) in Verbindung kommen können?

Danke!
 

Fu3L

Top Contributor
Wenn dir irgendwas einen primitiven Datentyp zurückliefern wird, dann MUSS das von vornherein feststehen. So sind die Regeln in Javas Typsystem.

Wenn du aber von "Außen", wie du sagst, irgentetwas unbekanntes bekommst (warum auch immer) und das könnte Zahl, komisches Objekt, Wahrheitswert sein, dann müsste das als Objekt übergeben werden. Da gibts dann die entsprechenden Klassen "Integer, Boolean" oder halt die Klasse des "komischen Objekts". Deswegen gibt es auch keine Collections-Klassen in der Standardbibliothek wie List<int>, weil du nur bei Objekten beliebiges einfügen kannst.

Ich komme gar nicht in die Verlegenheit auf Primitive zu testen, da ich intern wohl nur mit Objekten arbeite, die höchstens ihrerseits mit externen Daten (Primitiven) in Verbindung kommen können?

Dieser Satz scheint mir komisch^^ Wenn du mit externe Daten irgendwelche Quellen wie Datei oder Netzwerk meinst und dass du selbst nie int, double und co nutzen wirst, dann liegst du falsch^^
 
G

Gastredner

Gast
Wenn du von einem anderen System Daten geliefert bekommst, dann erfolgt dies in Java normalerweise über eine Schnittstelle, die zuvor von irgendjemandem - vorzugsweise von dir - definiert worden ist, beispielsweise durch ein Interface:
Java:
public interface ForeignSystem {

	void receiveData(int number, float secondNumber, String foo);
}
Da Java sicherstellt, dass die einer Methode übergebenen Argumente mit denen der Methodendeklaration übereinstimmen, kannst du sicher sein, dass bei einem Aufruf der Methode [c]receiveData()[/c] von dem Fremdsystem tatsächlich ein int, ein float und ein String dabei übergeben werden. Bei Klassen musst du allerdings daran denken, dass auch Unterklassen eines Typs Klassen dieses Typs sind:
Java:
class A {

	private int a;

	public A(int a) {
		this.a = a;
	}
}

class B extends A {
	// Vererbung bildet eine "Ist-Ein"-Beziehung ab, jede Instanz von B ist daher auch eine von A.

	private int b;

	public B(int a, int b) {
		super(a);
		this.b = b;
	}
}

public interface ForeignSystem {

	void receiveData(A a);
}

public class Test {

	public static void main(String[] args) {
		ForeignSystem system = // Irgendwoher kommt eine Implementierung des Interfaces;
		system.receiveData(new B(0, 0));	// B ist auch eine Instanz von A, daher ist dieser Aufruf zulässig. Innerhalb von reveiceData ist die Instanz von B sichtbar als eine Instanz von A.
	}
}
Kurz: du kannst davon ausgehen, dass bei einem Aufruf einer Java-Methode tatsächlich Datentypen übergeben werden, die mit den in der Methodendeklaration angegebenen Datentypen kompatibel sind. Ob es sich tatsächlich um diesen konkreten Typen oder eine Unterklasse davon handelt, kann dir an dieser Stelle egal sein - deine "Sicht" auf das gegebene Objekt entspricht dem Typen, mit dem es in der Methodendeklaration angegeben worden ist.

Problematisch wird es allerdings, wenn deine Methode irgendwie so deklariert worden ist: [c]receiveData(Object number, Object foo)[/c]. In diesem Fall könntest du nur Objekte verwenden und müsstest die übergebenen Datentypen tatsächlich auf ihren Typ prüfen - allerdings würde ich dies eher als Problem der Schnittstellendefinitioon ansehen und dort eine Änderung verlangen, da eine solche Schnittstelle fast immer unsinnig ist. Java bietet strenge Typisierung, die man auch nutzen sollte.
 
Zuletzt bearbeitet von einem Moderator:
D

DontKnowJava

Gast
Dieser Satz scheint mir komisch^^ Wenn du mit externe Daten irgendwelche Quellen wie Datei oder Netzwerk meinst und dass du selbst nie int, double und co nutzen wirst, dann liegst du falsch^^

Naja, der Satz _war komisch_
Aber ich denke ich verstehe es wirklich so langsam :)

Vielen Dank für die zahlreichen Antworten, vor allem der letzte Beitrag von Gastredner, den ich mir heute Abend in Ruhe ansehen werde!

DANKE :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C mehrdimensionales Object sortieren Java Basics - Anfänger-Themen 4
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
F Wie kann ein Object[] zu Integer[] umwandeln? Java Basics - Anfänger-Themen 6
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben