Warum ist es in Java erlaubt, Double in Char zu konvertieren?

8

Warum ist char c = (char)65.8; in Java erlaubt?

Sollte es keinen Fehler verursachen, da 65.8 kein exakter Unicode-Wert ist? Ich verstehe, dass das Double zu einer ganzen Zahl gekürzt wird, in diesem Fall 65 , aber es scheint mir ein schlechter Entwurf zu sein, dem Programmierer zu erlauben, einen solchen Cast zu machen.

    
Kootling 08.10.2014, 03:51
quelle

4 Antworten

10

Dies wird Eingrenzendes Casting genannt. Von oracle docs :

  

22 spezifische Konvertierungen von primitiven Typen werden als Verengung bezeichnet   Grundlegende Konvertierungen:

     

kurz zu Byte oder Zeichen

     

char zu Byte oder kurz

     

int in Byte, kurz oder char

     

long zu Byte, short, char oder int

     

Float zu Byte, Kurz, Char, Int oder Long

     

double to byte, kurz, char, int, long oder float

     

Eine verkleinerte primitive Konvertierung kann Informationen über die   Gesamtgröße eines numerischen Werts und kann auch die Genauigkeit verlieren und   Bereich.

In Java gibt es zwei grundlegende Arten von Typkonvertierungen: Erweiterung und Einschränkung .

A widening conversion tritt auf, wenn Sie von einem Typ mit einem kleineren (oder schmaleren) Typ in einen größeren (oder größeren) Bereich konvertieren. Aus diesem Grund besteht keine Möglichkeit für Datenverluste und die Konvertierung wird als "sicher" betrachtet.

A narrowing conversion tritt auf, wenn Sie von einem Typ mit größerem (oder breiterem) Typ in einen kleineren (oder schmaleren) Bereich umwandeln. Da wir die Reichweite verringern, besteht die Gefahr eines Datenverlusts. Daher wird diese Konvertierung als "unsicher"

betrachtet

Die Konvertierung von Byte nach char ist ein Sonderfall und steht gleichzeitig für Erweiterung und Einschränkung . Die Konvertierung beginnt mit der Konvertierung des Byte in ein int und dann wird das int in das Zeichen konvertiert. p>

Ein Grund, warum ich mir vorstellen kann, warum die Eingrenzung der Typumwandlung nicht zu einem Fehler / einer Ausnahme führt, ist eine bequeme / einfache / schnelle Typkonvertierung in den Fällen, in denen keine Daten verloren gehen. Der Compiler überlässt es uns, dass konvertierte Daten in den kleineren Bereich passen. Es ist auch nützlich, wenn wir Werte wie den Wert von double (durch Typ-Casting in int ) schnell abschneiden wollen.

    
nem035 08.10.2014, 03:57
quelle
4

es passiert nicht automatisch bei der Zuweisung: das wäre ein Kompilierungsfehler.

Die Tatsache, dass der Programmierer eine bewusste Entscheidung trifft (z. B. die Art der Besetzung), bedeutet, dass er die Möglichkeit und die Verantwortung für eine mögliche Kürzung in Betracht zieht.

    
Kevin 08.10.2014 03:59
quelle
2

Sie verfügen möglicherweise über Code wie Chiffrieralgorithmen, die für das Umwandeln von double oder float in char hilfreich sein können. Außerdem ist char ein vorzeichenloser Typ, was bedeutet, dass (char)200.5 etwas anderes ergibt als (char)(byte)200.5 .

    
fernacolo 08.10.2014 04:02
quelle
1

Wie kann der dumme Computer wissen, was beabsichtigt war?

%Vor%

Es kann passieren, dass Sie während einer Berechnung einige komplexe Berechnungen durchführen, die Doppelarithmetik beinhalten, und schließlich auf den endgültigen Wert, wenden Sie die Bildung und Anzeige als ein Zeichen an. Was ist los?

    
Dr. Debasish Jana 08.10.2014 03:57
quelle

Tags und Links