You are not logged in.

  • Login

1

Monday, November 9th 2009, 10:08am

Warum kein expliter Cast zu String?

Hallo, in Java lässt sich ja nicht explizit zum Datentyp String casten.

Warum haben die Macher dies so eingerichtet? Welche Überlegung steckt dahinter?

Danke im voraus, mfg

2

Monday, November 9th 2009, 12:36pm

Ich weiß nicht genau, was du damit meinst.

Man kann in Java genauso auf String casten, wie man auf jede andere Klasse casten kann.
Man muss halt nur beachten, dass String in Java kein primitiver Datentyp ist, sondern ne ganz normale Klasse.

3

Monday, November 9th 2009, 5:30pm

Man kann ganz ganz normal auf String casten, muss es aber nicht immer. Ich denke darum geht es dem Fragesteller. Bei dem Plus-Operator ist es so definiert, dass String+X (wobei X eine beliebige Klasse sein kann), als String+X.toString() interpretiert wird. Als Grund würde ich persönlich Faulheit der Entwickler vermuten :D . toString ist etwas das jedes Objekt immer hat (mindestens geerbt, bei ordentlicher Programmierung auch implementiert) und das sollte eine Beschreibung des Objektes beinhalten, vielleicht hat das bei der Entscheidung eine Rolle gespielt.

4

Monday, November 9th 2009, 9:07pm

Ich weiß nicht genau, was du damit meinst.


Ich meine man kann implizit casten zb: String x = "asdf" + 5;

aber nicht explizit: String x = (String) 5;

liegt es also daran, dass int ein primitiver typ ist und String nicht? (lerne gerade erst java..)

mfg

5

Monday, November 9th 2009, 9:45pm

Nein, enicht so ganz. 5 ist zwar ein primitiver Typ - in diesem Fall kommt aber Autoboxing zum Zuge und es wird implizit in die Wrapperklasse Integer einpackt (boxing). Diese wird dann implizit zum String gecastet. Über implizite Typecasts und Atoboxung/Autounboxing kannst du hier nachlesen: http://openbook.galileocomputing.de/java…2aa479dd2fb4d31. Als Anfänger empfehle ich dir eh viel in dem Buch zu lesen.

6

Monday, November 9th 2009, 9:46pm

Es liegt nicht nicht am primitiven Datentypen.

Beispiel:

Java Quellcode

1
2
Integer y = new Integer(5);
String x = (String)y;


Fehler:

Source code

1
2
3
4
5
Foo.java:16: inconvertible types
found   : java.lang.Integer
required: java.lang.String
		String x = (String)y;
		                   ^


Man hätte erwarten können, dass toString implizit aufgerufen wird. Explizit klappt es jedoch problemlos:

Java Quellcode

1
2
Integer y = 5;
String x = y.toString;


Ich nehme an, dass die Java Entwickler sich einfach Gedacht haben, dass es keinen Sinn macht einem String Zahlen zuzuordnen, wenn man es nicht wirklich explizit mit Integer.toString(X) oder String.valueOf anfordert.

7

Monday, November 9th 2009, 9:58pm

Was auch problemlos geht (und aus Faulheit auch gerne mal benutzt wird :D)

Java Quellcode

1
2
int y= 5;
String x= ""+y;


Das wäre dann implizit (es wird natürlich intern trotzdem die .toString-Methode aufgerufen).

8

Tuesday, November 10th 2009, 8:42am

Es liegt nicht nicht am primitiven Datentypen.
Ich nehme an, dass die Java Entwickler sich einfach Gedacht haben, dass es keinen Sinn macht einem String Zahlen zuzuordnen, wenn man es nicht wirklich explizit mit Integer.toString(X) oder String.valueOf anfordert.


Man kann aber auch nichts anderes explizit in einen String casten, zB. auch keinen char...

Muss mich wohl damit abfinden, dass es einfach so ist =D

9

Tuesday, November 10th 2009, 7:27pm

Das das nicht geht ist Absicht. Man möchte ja die Typsicherheit bewahren. Es wird so vorgebeugt, dass man aus versehen eine nicht-String-Vareable flascherweise als String verwendet. Das ist also pure Absicht und auch absolut RICHTIG so. Auch Java macht Kompromisse bei der Typsicherheit. So kann man andere Typen mittels des Plus-Operators direkt an einen String anfügen (wie oben gezeigt) oder auch ein Integer-Objekt einer int-Variablen zuweisen (wenn das Objekt null ist gibt es an der Stelle übrigens eine NullPointerException). Allerdings wurden diese Spezialfälle gründlich durchdacht und der Nutzen genau mit den zwangsläufig entstehenden Gefahren abgewogen.

Similar threads

Social bookmarks