Konvertierungen und Werbeaktionen in Java

Feb 22 2023
In diesem Artikel werden wir die primitive Konvertierung diskutieren. · Typkonvertierung ∘ Implizite Typkonvertierung ∘ Explizite Typkonvertierung · Automatische Typförderung in Ausdrücken · Unterschied zwischen Typumwandlung und Typzwang In der Informatik sind Typkonvertierung, Typumwandlung, Typzwang und Typjonglage verschiedene Möglichkeiten, einen Ausdruck von einem zu ändern Datentyp in einen anderen umwandeln.

In diesem Artikel werden wir die primitive Konvertierung diskutieren .

· Typkonvertierung
∘
Implizite Typkonvertierung
∘
Explizite Typkonvertierung
·
Automatische Typförderung in Ausdrücken
·
Unterschied zwischen Typumwandlung und Typzwang

In der Informatik sind Typkonvertierung , Typumwandlung , Typzwang und Typjonglage verschiedene Möglichkeiten, einen Ausdruck von einem Datentyp in einen anderen zu ändern. Ein Beispiel wäre die Umwandlung eines ganzzahligen Werts in einen Gleitkommawert oder dessen textuelle Darstellung als String und umgekehrt. Typkonvertierungen können bestimmte Merkmale von Typhierarchien oder Datendarstellungen nutzen. Zwei wichtige Aspekte einer Typkonvertierung sind, ob sie implizit (automatisch) oder explizit erfolgt und ob die zugrunde liegende Datendarstellung von einer Darstellung in eine andere umgewandelt wird oder eine gegebene Darstellung lediglich neu interpretiert wirdals Darstellung eines anderen Datentyps. Im Allgemeinen können sowohl primitive als auch zusammengesetzte Datentypen konvertiert werden.

Jede Programmiersprache hat ihre eigenen Regeln, wie Typen konvertiert werden können. Sprachen mit starker Typisierung führen in der Regel kaum implizite Konvertierungen durch und erschweren die Neuinterpretation von Darstellungen, während Sprachen mit schwacher Typisierung viele implizite Konvertierungen zwischen Datentypen durchführen. Eine schwache Typisierungssprache ermöglicht es oft, den Compiler zu zwingen, ein Datenelement willkürlich so zu interpretieren, dass es unterschiedliche Darstellungen hat – dies kann ein nicht offensichtlicher Programmierfehler oder eine technische Methode sein, direkt mit der zugrunde liegenden Hardware umzugehen.

Java bietet verschiedene Datentypen, genau wie alle anderen dynamischen Sprachen wie Boolean, Char, Int, Unsigned Int, Signed Int, Float, Double, Long usw. Insgesamt bietet Java 7 Typen, bei denen jeder Datentyp beim Speichern im Speicher unterschiedlichen Platz einnimmt.

Typkonvertierung

Wenn Sie über Programmiererfahrung verfügen, wissen Sie bereits, dass es durchaus üblich ist, einen Wert eines Typs einer Variablen eines anderen Typs zuzuweisen. Wenn die beiden Typen kompatibel sind, führt Java die Konvertierung automatisch durch (Typkonvertierung ) . Beispielsweise ist es immer möglich, einer Long-Variablen einen int-Wert zuzuweisen. Allerdings sind nicht alle Typen kompatibel und daher sind nicht alle Typkonvertierungen implizit zulässig. Beispielsweise ist keine automatische Konvertierung von Double in Byte definiert. Glücklicherweise ist es immer noch möglich, eine Konvertierung zwischen inkompatiblen Typen zu erhalten. Dazu müssen Sie einen cast verwenden, der einen expliziten Vorgang durchführtKonvertierung zwischen inkompatiblen Typen. Schauen wir uns sowohl die automatische oder erweiternde Typkonvertierung ( Typkoercion, Typjonglage ) als auch die einschränkende oder explizite Konvertierung ( Typumwandlung ) an.

Wie Sie sehen, ist es möglich, eine Umwandlung sowohl auf einen numerischen Wert als auch auf eine Variable durchzuführen. Beachten Sie, dass Sie überflüssige Besetzungen einführen können. Beispielsweise stuft der Compiler bei Bedarf automatisch einen int-Wert in einen long-Wert hoch. Sie dürfen jedoch überflüssige Umwandlungen verwenden, um einen Punkt zu verdeutlichen oder Ihren Code zu verdeutlichen. In anderen Situationen kann eine Umwandlung unerlässlich sein, nur um den Code zum Kompilieren zu bringen.

In C und C++ kann die Typkonvertierung einige Kopfschmerzen verursachen. In Java ist die Konvertierung sicher, mit der Ausnahme, dass Sie bei der Durchführung einer sogenannten einschränkenden Konvertierung (d. h. wenn Sie von einem Datentyp, der mehr Informationen enthalten kann, zu einem Datentyp wechseln, der nicht so viele Informationen enthält) Folgendes ausführen: Gefahr, Informationen zu verlieren. Hier zwingt Sie der Compiler dazu, eine Umwandlung (Typumwandlung) zu verwenden , was im Grunde bedeutet: „Das kann gefährlich sein – wenn Sie möchten, dass ich es trotzdem mache, müssen Sie die Konvertierung explizit machen.“.“ Bei einer erweiternden Konvertierung ist eine Umwandlung (explizite Umwandlung) nicht erforderlich, da der neue Typ mehr als nur die Informationen des alten Typs enthält, sodass niemals Informationen verloren gehen. Mit Java können Sie jeden primitiven Typ in jeden anderen primitiven Typ konvertieren, mit Ausnahme des booleschen Typs, der überhaupt keine Umwandlung zulässt. Klassentypen erlauben kein Casting. Um das eine in das andere umzuwandeln, müssen spezielle Methoden vorhanden sein. (…)

Implizite Typkonvertierung

Wird auch als „automatische oder Mittwochstypkonvertierung“ bezeichnet.

  • Wird vom Compiler selbst durchgeführt, ohne externen Auslöser durch den Benutzer.
  • Tritt im Allgemeinen auf, wenn in einem Ausdruck mehr als ein Datentyp vorhanden ist. In einer solchen Bedingung findet eine Typkonvertierung (Typheraufstufung) statt, um Datenverluste zu vermeiden.
  • Alle Datentypen der Variablen werden auf den Datentyp der Variablen mit dem größten Datentyp aktualisiert.
  • bool -> char -> short int -> int -> 
    
    unsigned int -> long -> unsigned -> 
    
    long long -> float -> double -> long double
    

  • Die beiden Typen sind kompatibel. Beispielsweise sind Datentypen wie „numerisch“ mit anderen numerischen Datentypen kompatibel, nicht jedoch mit den Datentypen „boolean “ , „char “ oder „String “. Ebenso ist String nicht mit einem booleschen Datentyp kompatibel.
  • Der Zieltyp ist größer als der Quelltyp.

Es ist möglich, dass implizite Konvertierungen Informationen verlieren, Vorzeichen verloren gehen (wenn „signed“ implizit in „unsigned“ konvertiert wird) und es zu einem Überlauf kommen kann (wenn „long long“ implizit in „float“ konvertiert wird).

manchmal bezeichnen wir diese Art der Konvertierung als Typ Ceorcion.

In Java wird der Mechanismus zum Konvertieren eines Objekttyps in ein anderes Objekt eines anderen Typs mit ähnlichem Inhalt als Zwang bezeichnet. Mit anderen Worten können wir sagen, dass Zwang der Prozess der Konvertierung eines Datentyps in einen anderen Datentyp ist. Genauer gesagt wird die implizite Konvertierung als Zwang bezeichnet . Es wird auch als Typenzwang bezeichnet .

Beim Typ ceorcion wird ein Datentyp zum Compilerzeitpunkt automatisch von einem Compiler in einen anderen Datentyp konvertiert. Beim Typ ceorcion darf der Zieldatentyp nicht kleiner sein als der Quelldatentyp, daher wird dies auch als erweiternde Konvertierung bezeichnet. Ein weiterer wichtiger Punkt ist, dass es nur auf kompatible Datentypen angewendet werden kann.

Beispiel für den Typ Ceorcion –

int x=30;
float y;
y=x;  // y==30.000000.

Java zwingt Daten automatisch in die Richtung der Pfeile, entweder durchgezogen oder gestrichelt. Zum Beispiel:

Zwänge, die einen gepunkteten Pfeil überschreiten, sind zulässig, können jedoch zu einem Verlust an Präzision führen. Dies bedeutet, dass der konvertierte Wert möglicherweise nicht mit dem Startwert übereinstimmt. Zum Beispiel:

Der Compiler gibt einen Fehler aus, wenn eine Anweisung versucht, Daten entgegen der Pfeilrichtung zu erzwingen.

Schauen wir uns ein Beispiel für implizite Typumwandlung in Java an.

Hier konvertieren wir einen int- Wert in einen long- Wert und schließlich in einen double- Wert, indem wir einen einfachen Zuweisungsoperator verwenden:

public class Main {
  public static void main(String[] args) {
    int a = 20;
    long b = a;     //implicit casting from int to long data type
    double c = b; 
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
}  // implicit casting from long to double data type

20
20
20.0

Mit anderen Worten bezieht sich „Typkonvertierung“ auf den allgemeinen Prozess der Änderung eines Typs, während sich Typzwang spezifischer auf die implizite Konvertierung eines Typs bezieht. Wir können den Typzwang weiter in zwei Arten unterteilen: vom Programmierer gesteuert und vom Compiler gesteuert (manchmal auch als Jonglieren bezeichnet ).

Explizite Typkonvertierung

Obwohl die automatischen Typkonvertierungen hilfreich sind, werden sie nicht alle Anforderungen erfüllen. Was ist beispielsweise, wenn Sie einer Byte-Variablen einen int-Wert zuweisen möchten? Diese Konvertierung wird nicht automatisch durchgeführt, da ein Byte kleiner als ein Int ist. Diese Art der Konvertierung wird manchmal als Typumwandlung bezeichnet und ist benutzerdefiniert.

Dieser Vorgang wird auch als einschränkende Typkonvertierung bezeichnet, da Sie den Wert explizit enger machen, damit er in den Zieltyp passt.

Um eine Konvertierung zwischen zwei inkompatiblen Typen zu erstellen, müssen Sie eine Typumwandlung verwenden. Eine Umwandlung ist einfach eine explizite Typkonvertierung.

In Java kann dies mithilfe eines Cast-Operators () erfolgen :

Dies geschieht durch die explizite Angabe des erforderlichen Typs vor dem Ausdruck in Klammern.

Es hat diese allgemeine Form:

(target-type) expression

Hier gibt Zieltyp den gewünschten Typ an, in den der angegebene Wert konvertiert werden soll. Das folgende Fragment wandelt beispielsweise ein int in ein byte um . Wenn der Wert der Ganzzahl größer als der Bereich eines Bytes ist , wird er modulo (der Rest einer Ganzzahl Division durch den Bereich) des Bytes reduziert.

int a; 
byte b; // … 
b = (byte) a;

Das folgende Programm demonstriert einige Typkonvertierungen, die Umwandlungen erfordern:

// Demonstrate casts.
class Conversion {
public static void main(String args[]) {
byte b;
int i = 257;
double d = 323.142;
System.out.println("\nConversion of int to byte.");
b = (byte) i;
System.out.println("i and b " + i + " " + b);
System.out.println("\nConversion of double to int.");
i = (int) d;
System.out.println("d and i " + d + " " + i);
System.out.println("\nConversion of double to byte.");
b = (byte) d;
System.out.println("d and b " + d + " " + b);
}
}

Conversion of int to byte. i and b 257 1 
Conversion of double to int. d and i 323.142 323 
Conversion of double to byte. d and b 323.142 67

Schauen wir uns ein Beispiel für explizites Casting in Java an:

public class Main  {  
  public static void main(String args[])  {  
    double d = 57.17;  
    int i = (int)d;  // Explicit casting from long to int data type
    System.out.println(d);  
    System.out.println(i);  //fractional part lost
  }  
}

57.17
57
57

Automatische Typheraufstufung in Ausdrücken

Die Typheraufstufung kommt in der Java-Programmierung häufig vor und kann mit primitiven Datentypen mithilfe der Autotyp-Heraufstufung automatisch erreicht werden. Dies wird auch als automatische Datentyp-Heraufstufung bezeichnet.

Wie Sie vielleicht wissen, gibt es neben Zuweisungen noch einen anderen Ort, an dem bestimmte Typkonvertierungen stattfinden können: in Ausdrücken.

Nachfolgend finden Sie eine schematische Darstellung möglicher Typenförderungen:

Sie werden feststellen, dass, wenn Sie mathematische oder bitweise Operationen an primitiven Datentypen ausführen, die kleiner als ein int (d. h. char, byte oder short) sind, diese Werte vor der Ausführung der Operationen und der daraus resultierenden Operationen zu int heraufgestuft werden Der Wert wird vom Typ int sein. Wenn Sie also wieder in den kleineren Typ zuweisen möchten, müssen Sie eine Umwandlung verwenden. (Und da Sie einem kleineren Typ zuweisen, gehen möglicherweise Informationen verloren.) Im Allgemeinen ist der größte Datentyp in einem Ausdruck derjenige, der die Größe des Ergebnisses dieses Ausdrucks bestimmt; Wenn Sie einen Float und einen Double multiplizieren, ist das Ergebnis Double; Wenn Sie ein int und ein long hinzufügen, ist das Ergebnis long.

Um mehr zu verstehen:

Folgendes berücksichtigen. In einem Ausdruck übersteigt die erforderliche Genauigkeit eines Zwischenwerts manchmal den Bereich eines Operanden. Untersuchen Sie beispielsweise den folgenden Ausdruck:

byte a = 40;
byte b = 50;
byte c = 100;
int d = a * b / c;

So nützlich die automatischen Heraufstufungen auch sind, sie können zu verwirrenden Fehlern bei der Kompilierung führen. Dieser scheinbar korrekte Code verursacht beispielsweise ein Problem:

byte b = 50;
b = b * 2; // Error! Cannot assign an int to a byte!

In Fällen, in denen Sie die Folgen eines Überlaufs verstehen, sollten Sie eine explizite Umwandlung verwenden, z

byte b = 50;
b = (byte)(b * 2);

Regeln für die automatische Typförderung

Bei der Ausführung von Ausdrücken in Java müssen die folgenden Regeln für die Typheraufstufung befolgt werden, um korrekte Ergebnisse zu erzielen:

  • Alle Variablen der Typen byte , short und char müssen automatisch zum Typ int heraufgestuft werden .
  • Wenn eine an einer Operation beteiligte Variable long ist , muss das Ergebnis der Operation long sein .
  • Wenn eine an einer Operation beteiligte Variable float ist , muss das Ergebnis der Operation float sein .

Sehen wir uns einige Java-Beispiele an, die die numerischen Promotion-Regeln in Java veranschaulichen.

1- Wenn einer der Operanden doppelt ist.

public class PromotionExample {
 public static void main(String[] args) {
  int i = 30;
  double d = 2.5;
  double result = i * d;
  System.out.println("Result is- " + result);
 }
}
// output :
// Result is- 75.0

2- Wenn einer der Operanden Float ist.

public class PromotionExample {
 public static void main(String[] args) {
  short s = 4;
  int i = 30;
  float f = 6.75f;
  float result = (s+i) * f;
  System.out.println("Result is- " + result);
 }
}
//output
// Result is- 229.5

3- Versuch, das Ergebnis int zuzuweisen, wenn einer der Operanden float ist.

public class PromotionExample {
 public static void main(String[] args) {
  byte a= 100;
  byte b= 50;
  int i= 80;
  float f = 80;
  result = f/i *b; // line 6
 }
}

      
                
error line 6

Sehen wir uns den Unterschied zwischen Type Casting und Type Coercion an, der unten aufgeführt ist:

  1. Beim Typumwandeln wird ein Datentyp von einem Programmierer mithilfe eines Umwandlungsoperators in einen anderen Datentyp umgewandelt. Bei der Typerzwingung hingegen wird ein Datentyp von einem Compiler in einen anderen Datentyp konvertiert.
  2. Typumwandlung kann sowohl auf kompatible Datentypen als auch auf inkompatible Datentypen angewendet werden . Typumwandlung kann hingegen nur auf kompatible Datentypen angewendet werden .
  3. Bei der Typumwandlung wird ein Umwandlungsoperator benötigt, um einen Datentyp in einen anderen Datentyp umzuwandeln. Bei der Typerzwingung hingegen ist kein Umwandlungsoperator erforderlich.
  4. Bei der Typumwandlung ( explizite Typkonvertierung) kann der Zieldatentyp kleiner als der Quelldatentyp sein, wenn der Datentyp in einen anderen Datentyp konvertiert wird. Bei der Typerzwingung ( implizite Typkonvertierung) kann der Zieldatentyp hingegen nicht kleiner sein als der Quelldatentyp kleiner als der Quelldatentyp.
  5. Die Typumwandlung erfolgt während des Programmentwurfs durch den Programmierer. Die Typkonvertierung ( implizite Typkonvertierung) erfolgt hingegen zur Kompilierungszeit.
  6. Die Typumwandlung wird auch als einschränkende Konvertierung bezeichnet, da der Zieldatentyp dabei möglicherweise kleiner als der Quelldatentyp ist. Typumwandlung ( implizite Typkonvertierung) wird jedoch auch als erweiternde Konvertierung bezeichnet, da der Zieldatentyp hierbei nicht kleiner sein darf als der Quelldatentyp.
  7. Typumwandlung wird häufig in Codierungs- und Wettbewerbsprogrammierungsarbeiten verwendet. Typzwang ( implizite Typkonvertierung) wird hingegen in Codierungs- und Wettbewerbsprogrammierungsarbeiten weniger verwendet, da dies zu falschen Antworten führen kann.
  8. Typumwandlung ist effizienter und zuverlässiger, während Typzwang ( implizite Typkonvertierung) weniger effizient und weniger zuverlässig ist.

Unterstützen Sie unsere Publikation, indem Sie ihr folgen

Beachten Sie auch die folgenden Artikel.

2023 Reagieren Sie auf JS-Trends, um das Clickjacking und seine vorbeugenden Maßnahmen zu beobachten . Splunk-Integration mit SpringBoot Teil – 1 Codierung: Überprüfen Sie, ob zwei Strings Anagramme in Javascript sind. Warum Java die beliebteste Programmiersprache auf dem Planeten ist. Methoden in Java verstehen. 5 häufige JavaScript-Fragen: Einführung in die Spark-Architektur 25. Größter binärer Suchunterbaum (BST)