{"id":42267,"date":"2024-12-03T11:41:13","date_gmt":"2024-12-03T10:41:13","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=42267"},"modified":"2026-06-06T11:14:22","modified_gmt":"2026-06-06T09:14:22","slug":"primitive-type-patterns","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/java\/primitive-type-patterns\/","title":{"rendered":"Primitive Typen in Patterns, instanceof und switch (Java)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In diesem Artikel erf\u00e4hrst du:<\/p>\n\n\n\n<ul class=\"wp-block-list hc-checked-list\">\n<li>Was ist Pattern Matching?<\/li>\n\n\n\n<li>Wie k\u00f6nnen wir primitive Typen im Pattern Matching mit <em>instanceof<\/em> verwenden?<\/li>\n\n\n\n<li>Wie k\u00f6nnen wir primitive Typen im Pattern Matching mit <em>switch<\/em> verwenden?<\/li>\n\n\n\n<li>Was ist der Unterschied zwischen Pattern Matching mit primitiven Typen und mit Objekt-Typen (\u201eReferenztypen\u201c)?<\/li>\n\n\n\n<li>Was sind dominierende und dominierte primitive Typen?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wir beginnen mit einem kurzen Auffrischer \u00fcber Pattern Matching in Java. Wenn du bereits mit Pattern Matching im Allgemeinen vertraut bist, \u00fcberspringe gerne das Einf\u00fchrungskapitel und gehe direkt zum zweiten Kapitel, <a href=\"#neuerungen-seit-java-23\">Neuerungen seit Java 23<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"was-ist-pattern-matching\">Was ist Pattern Matching?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pattern Matching in Java wurde erstmals in <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-16-features\/#Pattern_Matching_for_instanceof\">Java 16<\/a> mit <em>Pattern Matching for instanceof<\/em> als finales Feature ver\u00f6ffentlicht und in <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-21-features\/#Pattern_Matching_for_switch_JEP_441\">Java 21<\/a> um <em>Pattern Matching for switch<\/em> erweitert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das folgende Code-Beispiel benutzt Pattern Matching, um herauszufinden, ob die Variable <code>obj<\/code> vom Typ String ist, und wenn ja, diesen in Gro\u00dfbuchstaben konvertiert auszugeben:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Object obj = . . .\n<span class=\"hljs-keyword\">if<\/span> (obj <span class=\"hljs-keyword\">instanceof<\/span> String s) {\n    IO.println(s.toUpperCase());\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das Pattern ist in diesem Beispiel <code>String s<\/code>. Der Code pr\u00fcft zun\u00e4chst, ob die <code>Object<\/code>-Variable <code>obj<\/code> auf dieses Pattern \u201ematcht\u201c. Das tut sie, wenn <code>obj<\/code> vom Typ <code>String<\/code> ist. Wenn das der Fall ist, wird der Inhalt von <code>obj<\/code> in der String-Variablen <code>s<\/code> zur Verf\u00fcgung gestellt, in Gro\u00dfbuchstaben konvertiert und ausgegeben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das folgende Beispiel ist etwas komplexer und benutzt <code>switch<\/code> statt <code>instanceof<\/code>, um die Variable <code>obj<\/code> mit verschiedenen Patterns abzugleichen und um je nach Typ verschiedene Aktionen durchzuf\u00fchren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">switch<\/span> (obj) {\n    <span class=\"hljs-keyword\">case<\/span> String s when s.length() &gt;= <span class=\"hljs-number\">5<\/span> -&gt; IO.println(s.toUpperCase());\n    <span class=\"hljs-keyword\">case<\/span> Integer i                     -&gt; IO.println(i * i);\n    <span class=\"hljs-keyword\">case<\/span> Number n                      -&gt; IO.println(n + <span class=\"hljs-string\">\" is a number\"<\/span>);\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">null<\/span>, <span class=\"hljs-keyword\">default<\/span>                 -&gt; IO.println(obj);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das erste Pattern, <code>String s when s.length() &gt;= 5<\/code>, ist ein sogenanntes \u201eGuarded Pattern\u201c, ein Pattern mit einer Einschr\u00e4nkung, und <code>s.length() &gt;= 5<\/code> ist der \u201eGuard\u201c. Die Variable <code>obj<\/code> matcht dieses Pattern dann, wenn sie vom Typ String ist und dieser String mindestens f\u00fcnf Zeichen lang ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das zweite Pattern, <code>Integer i<\/code>, matcht, wenn <code>obj<\/code> vom Typ <code>Integer<\/code> ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das dritte Pattern, <code>Number n<\/code>, matcht, wenn <code>obj<\/code> von einem von der abstrakten Klasse <code>Number<\/code> abgeleiteten Typ ist, also z. B. <code>Long<\/code> oder <code>Double<\/code>, aber auch <code>AtomicInteger<\/code> oder <code>BigDecimal<\/code>. Das Pattern w\u00fcrde auch auf Variablen vom Typ <code>Integer<\/code> matchen, aber die werden bereits in der Zeile zuvor durch das Pattern <code>Integer i<\/code> \u201eabgefangen\u201c.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"neuerungen-seit-java-23\">Neuerungen seit Java 23<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bisher funktioniert Pattern Matching nur mit Referenztypen, also z. B. <code>String<\/code> und <code>Integer<\/code>, nicht aber mit primitiven Typen wie <code>int<\/code>, <code>long<\/code> und <code>double<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-23-features\/#primitive-types-in-patterns-instanceof-and-switch-preview-jep-455\">Java 23<\/a> wurde durch <a href=\"https:\/\/openjdk.org\/jeps\/455\" target=\"_blank\" rel=\"noopener\">JDK Enhancement Proposal 455<\/a> das Preview-Feature \u201ePrimitive Types in Patterns, instanceof, and switch\u201c vorgestellt. Im aktuellen <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-26-features\/#primitive-types-in-patterns-instanceof-and-switch-fourth-preview-jep-530\">Java 26<\/a> sowie im kommenden <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-27-features\/#primitive-types-in-patterns-instanceof-and-switch-fifth-preview-jep-532\">Java 27<\/a> ist es nach wie vor im Preview-Stadium \u2013 grundlegende \u00c4nderungen gab es seit Java 23 keine (abgesehen von einigen Verfeinerungen der Dominanzregeln, auf die ich weiter unten hinweise).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn du dieses Feature mit <code>--enable-preview<\/code> aktivierst, kannst du:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>primitive Typen im Pattern Matching verwenden,<\/li>\n\n\n\n<li>in <code>switch<\/code> Konstanten der Typen <code>long<\/code>, <code>float<\/code>, <code>double<\/code> und <code>boolean<\/code> verwenden.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Die erste \u00c4nderung beschreibe ich im Detail im kommenden Abschnitt, <a href=\"#primitive-typen-im-pattern-matching\">Primitive Typen im Pattern Matching<\/a>. Die zweite \u00c4nderung erkl\u00e4re ich schnell an dieser Stelle:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seit jeher k\u00f6nnen wir mit <code>switch<\/code> eine Variable mit Konstanten vergleichen, z. B. wie folgt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> code = . . .\n<span class=\"hljs-keyword\">switch<\/span> (code) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">200<\/span> -&gt; IO.println(<span class=\"hljs-string\">\"OK\"<\/span>);\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">400<\/span> -&gt; IO.println(<span class=\"hljs-string\">\"Bad Request\"<\/span>);\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">404<\/span> -&gt; IO.println(<span class=\"hljs-string\">\"Not Found\"<\/span>);\n    . . .\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das funktioniert allerdings bisher nur mit den Typen <code>byte<\/code>, <code>short<\/code>, <code>char<\/code> und <code>int<\/code>. Wenn du in der ersten Zeile <code>int<\/code> beispielsweise durch <code>long<\/code> ersetzt, bekommst du einen Compilerfehler:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">error: selector type long is not allowed<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Wenn du ab Java 23 das Feature \u201ePrimitive Types in Patterns, instanceof, and switch\u201c mit <code style=\"white-space:nowrap\">--enable-preview<\/code> aktivierst, verschwindet diese Fehlermeldung. Du darfst dann jeden beliebigen primitiven Typ in <code>switch<\/code> verwenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"primitive-typen-im-pattern-matching\">Primitive Typen im Pattern Matching<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Objekt matcht ein Pattern, wenn das Objekt einer Variable vom Typen des Pattern zugewiesen werden kann. Wie du im vorherigen Abschnitt gesehen hast, matcht z. B. ein <code>Integer<\/code>-Objekt auf das Pattern <code>Integer i<\/code> \u2013 es w\u00fcrde aber auch auf die Pattern <code>Number n<\/code> oder <code>Object o<\/code> \u2013 und sogar auf <code>Comparable c<\/code> oder <code>Serializable s<\/code> matchen, denn <code>Integer<\/code> erbt von <code>Number<\/code> und implementiert u. a. <code>Comparable<\/code>, und <code>Number<\/code> erbt von <code>Object<\/code> und implementiert <code>Serializable<\/code>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"252\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-600x252.png\" alt=\"Klassendiagramm: Integer erweitert Number, Number erweitert Object\" class=\"wp-image-42346\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-600x252.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-224x94.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-336x141.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-504x212.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-672x282.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-400x168.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-800x336.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy-944x396.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/integer-inheritence-hierarchy.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Bei primitiven Typen gibt es allerdings keine Vererbung. Daher funktioniert Pattern Matching bei primitiven Typen nicht genau wie bei Referenztypen \u2013 aber \u00e4hnlich. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im folgenden Abschnitt erkl\u00e4re ich dir zun\u00e4chst, wie primitive Typen im Pattern Matching mit <em>instanceof<\/em> verwendet werden. Im darauf folgenden Abschnitt zeige ich dir dann primitive Typen im Pattern Matching mit <em>switch<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"primitive-typ-pattern-mit-instanceof\">Primitive Typ-Pattern mit instanceof<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nicht erschrecken: ich beginne mit einer mathematisch klingenden Formulierung, erkl\u00e4re dann aber sofort an einem Beispiel, was gemeint ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sei <code>a<\/code> eine Variable eines primitiven Typen (also <code>byte<\/code>, <code>short<\/code>, <code>int<\/code>, <code>long<\/code>, <code>float<\/code>, <code>double<\/code>, <code>char<\/code> oder <code>boolean<\/code>) und <code>B<\/code> einer eben dieser primitiven Typen. Dann ergibt <code>a instanceof B<\/code> genau dann <code>true<\/code>, wenn der <em>pr\u00e4zise<\/em> Wert von <code>a<\/code> auch in einer Variablen vom Typ <code>B<\/code> gespeichert werden kann.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 1<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Hier kommt schon das Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> value = . . .\n<span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">byte<\/span> b) {\n    IO.println(<span class=\"hljs-string\">\"b = \"<\/span> + b);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Der Code ist wie folgt zu lesen: Wenn der Wert der Variablen <code>value<\/code> auch in einer <code>byte<\/code>-Variablen gespeichert werden kann, dann weise der <code>byte<\/code>-Variablen <code>b<\/code> diesen Wert zu und gebe ihn aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr <code>value = 5<\/code> w\u00e4re das z. B. der Fall, f\u00fcr <code>value = 1000<\/code> hingegen nicht, da eine Variable vom Typ <code>byte<\/code> lediglich Werte von -128 bis 127 speichern kann.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 2<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ein zweites Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">double<\/span> value = . . .\n<span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">float<\/span> f) {\n    IO.println(<span class=\"hljs-string\">\"f = \"<\/span> + f);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Hier wird gepr\u00fcft, ob das <code>double<\/code> <code>value<\/code> auch als <code>float<\/code> dargestellt werden kann. Das w\u00e4re z. B. f\u00fcr <code style=\"white-space:nowrap\">value = 1.5<\/code> der Fall, f\u00fcr <code style=\"white-space:nowrap\">value = Math.PI<\/code> aber nicht, da <code>float<\/code> nicht pr\u00e4zise genug ist, um alle Stellen der <code>double<\/code>-Konstante <code>Math.PI<\/code> aufzunehmen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 3<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Weisen wir <code>value<\/code> mal einen konkreten Wert zu und pr\u00fcfen diesen gegen alle numerischen primitiven Typen (ein Vergleich numerischer Typen mit <code>boolean<\/code> ist nicht erlaubt und f\u00fchrt zu einem Compilerfehler).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist, anstelle eines Code-Schnipsels, ein vollst\u00e4ndiges, ausf\u00fchrbares Demo-Programm:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">int<\/span> value = <span class=\"hljs-number\">65<\/span>;\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">byte<\/span> b)   IO.println(value + <span class=\"hljs-string\">\" instanceof byte:   \"<\/span> + b);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">short<\/span> s)  IO.println(value + <span class=\"hljs-string\">\" instanceof short:  \"<\/span> + s);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">int<\/span> i)    IO.println(value + <span class=\"hljs-string\">\" instanceof int:    \"<\/span> + i);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">long<\/span> l)   IO.println(value + <span class=\"hljs-string\">\" instanceof long:   \"<\/span> + l);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">float<\/span> f)  IO.println(value + <span class=\"hljs-string\">\" instanceof float:  \"<\/span> + f);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">double<\/span> d) IO.println(value + <span class=\"hljs-string\">\" instanceof double: \"<\/span> + d);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">char<\/span> c)   IO.println(value + <span class=\"hljs-string\">\" instanceof char:   \"<\/span> + c);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Wenn du das Programm z. B. in der Datei <em>Test.java<\/em> speicherst, dann kannst du es ab Java 23 wie folgt starten:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">java --enable-preview Test.java<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Du siehst dann folgende Ausgabe:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">65 instanceof byte:   65\n65 instanceof short:  65\n65 instanceof int:    65\n65 instanceof long:   65\n65 instanceof float:  65.0\n65 instanceof double: 65.0\n65 instanceof char:   A<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Der Wert 65 kann also in Variablen aller anderen primitiven Typen (au\u00dfer <code>boolean<\/code>) gespeichert werden. Du siehst hier sehr sch\u00f6n, dass dieser Wert als <code>float<\/code> und <code>double<\/code> mit einer Nachkommastelle dargestellt wird und als <code>char<\/code> als das Zeichen 'A' (dessen ASCII-Code die 65 ist).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 4<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir <code>value<\/code> auf 100.000 ersetzen, kommt folgende Ausgabe heraus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">100000 instanceof int:    100000\n100000 instanceof long:   100000\n100000 instanceof float:  100000.0\n100000 instanceof double: 100000.0<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Der Wert 100.000 kann also in Variablen vom Typ <code>int<\/code>, <code>long<\/code>, <code>float<\/code> und <code>double<\/code> gespeichert werden, nicht aber in Variablen vom Typ <code>byte<\/code>, <code>short<\/code> und <code>char<\/code>. Deren Zahlenraum geht nur bis 127, 32.767 und 65.535.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 5<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Interessant wird es f\u00fcr <code>value = 16_777_217<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">16777217 instanceof int:    16777217\n16777217 instanceof long:   16777217\n16777217 instanceof double: 1.6777217E7<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Die Zahl 16.777.217 kann also in <code>int<\/code>, <code>long<\/code> und <code>double<\/code> gespeichert werden, nicht aber in <code>float<\/code>?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist tats\u00e4chlich der Fall! Lass einmal folgenden Code laufen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">float<\/span> f = <span class=\"hljs-number\">16_777_217<\/span>;\nIO.println(<span class=\"hljs-string\">\"f = %.1f\"<\/span>.formatted(f));<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das Ergebnis ist unerwartet:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">f = 16777216.0<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Die ausgegebene Zahl endet auf 6, nicht auf 7!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das liegt daran, dass der Gleitkommatyp <code>float<\/code> eine begrenzte Genauigkeit hat und zwar beispielsweise 16.777.216, 16.777.218 und 16.777.220 speichern kann, nicht aber die dazwischen liegenden Werte 16.777.217 und 16.777.219.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 6<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Im folgenden Beispiel ist <code>value<\/code> eine Gleitkommazahl vom Typ <code>float<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">float<\/span> value = <span class=\"hljs-number\">3.5f<\/span>;\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">byte<\/span> b)   IO.println(value + <span class=\"hljs-string\">\" instanceof byte:   \"<\/span> + b);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">short<\/span> s)  IO.println(value + <span class=\"hljs-string\">\" instanceof short:  \"<\/span> + s);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">int<\/span> i)    IO.println(value + <span class=\"hljs-string\">\" instanceof int:    \"<\/span> + i);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">long<\/span> l)   IO.println(value + <span class=\"hljs-string\">\" instanceof long:   \"<\/span> + l);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">float<\/span> f)  IO.println(value + <span class=\"hljs-string\">\" instanceof float:  \"<\/span> + f);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">double<\/span> d) IO.println(value + <span class=\"hljs-string\">\" instanceof double: \"<\/span> + d);\n    <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">char<\/span> c)   IO.println(value + <span class=\"hljs-string\">\" instanceof char:   \"<\/span> + c);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Jetzt gibt das Programm folgendes aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">3.5 instanceof float:  3.5\n3.5 instanceof double: 3.5<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Klar, denn eine Zahl mit Nachkommastellen ist nat\u00fcrlich nur mit <code>float<\/code> und <code>double<\/code> darstellbar.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beispiel 7<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir <code>value<\/code> aber auf <code>100000.0f<\/code> setzen, sieht das Ergebnis wie folgt aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">100000.0 instanceof int:    100000\n100000.0 instanceof long:   100000\n100000.0 instanceof float:  100000.0\n100000.0 instanceof double: 100000.0<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Die Gleitkommazahl 100.000,0 kann, da sie keine Nachkommastellen hat, auch in einem <code>int<\/code> oder einem <code>long<\/code> gespeichert werden.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Pattern Matching mit boolean<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><code>boolean<\/code> darf \u00fcbrigens nur mit <code>boolean<\/code> verglichen werden. Jeder Vergleich von <code>boolean<\/code> mit einem anderen Typ oder einem anderen Typ mit <code>boolean<\/code> f\u00fchrt zu einem <em>\u201eincompatible types\u201c<\/em> Compilerfehler.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viel bringt uns Pattern Matching mit <code>boolean<\/code> ohnehin nicht, denn ein Pattern-Abgleich einer booleschen Variablen mit dem Typ <code>boolean<\/code> ergibt immer <code>true<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Primitive Typ-Pattern mit instanceof und &amp;&amp;<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Genau wie bei Referenztypen darfst du auch bei primitiven Typen direkt im <code>instanceof<\/code>-Check mit <code>&amp;&amp;<\/code> weitere Pr\u00fcfungen anschlie\u00dfen. Der folgende Code z. B. gibt nur positive <code>byte<\/code>-Werte (also 1 bis 127) aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> a = . . .\n<span class=\"hljs-keyword\">if<\/span> (a <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-keyword\">byte<\/span> b &amp;&amp; b &gt; <span class=\"hljs-number\">0<\/span>) {\n    IO.println(<span class=\"hljs-string\">\"b = \"<\/span> + b);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"convertkit-form wp-block-convertkit-form\" style=\"\"><script async data-uid=\"1427197203\" src=\"https:\/\/happycoders.kit.com\/1427197203\/index.js\" data-jetpack-boost=\"ignore\" data-no-defer=\"1\" data-no-optimize=\"1\" nowprocket><\/script><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"primitive-typ-pattern-mit-switch\">Primitive Typ-Pattern mit switch<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wir k\u00f6nnen primitive Pattern nicht nur in <code>instanceof<\/code> einsetzen, sondern auch in <code>switch<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">double<\/span> value = <span class=\"hljs-number\">100000.0<\/span>;\n    <span class=\"hljs-keyword\">switch<\/span> (value) {\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">byte<\/span>   b -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof byte:   \"<\/span> + b);\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">short<\/span>  s -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof short:  \"<\/span> + s);\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">char<\/span>   c -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof char:   \"<\/span> + c);\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span>    i -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof int:    \"<\/span> + i);\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">long<\/span>   l -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof long:   \"<\/span> + l);\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">float<\/span>  f -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof float:  \"<\/span> + f);\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">double<\/span> d -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof double: \"<\/span> + d);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das Programm f\u00fchrt zu folgender Ausgabe:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">100000.0 instanceof int:    100000<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Wir sehen hier nicht alle matchenden Pattern, sondern nur das erste, da durch <code>switch<\/code> ja immer nur ein einziger Programmpfad ausgef\u00fchrt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ein paar Beispiele f\u00fcr <code>value<\/code> zusammen mit dem Typ des ersten matchenden Patterns:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>value<\/th><th>Erster matchender Typ<\/th><th>Zahlenraum des matchenden Typs<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>byte<\/td><td>-128 bis 127<\/td><\/tr><tr><td>10.000<\/td><td>short<\/td><td>-32.768 bis 32.767<\/td><\/tr><tr><td>50.000<\/td><td>char<\/td><td>0 bis 65.535<\/td><\/tr><tr><td>1.000.000<\/td><td>int<\/td><td>-2.147.483.648 bis 2.147.483.647<\/td><\/tr><tr><td>1.000.000.000.000<\/td><td>long<\/td><td>ca. minus bis plus 9 Trillionen<\/td><\/tr><tr><td>0.125<\/td><td>float<\/td><td>Flie\u00dfkommazahlen mit einfacher Genauigkeit<\/td><\/tr><tr><td>0.126<\/td><td>double<\/td><td>Flie\u00dfkommazahlen mit doppelter Genauigkeit<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"primitive-typ-pattern-mit-switch-und-when-guarded-pattern\">Primitive Typ-Pattern mit switch und when (\u201eGuarded Pattern\u201c)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Auch bei primitiven Typ-Pattern in <code>switch<\/code> k\u00f6nnen wir \u201eguards\u201d verwenden, also das Pattern mit <code>when<\/code> mit einem booleschen Ausdruck versehen. Das kann z. B. dann hilfreich sein, wenn wir nach Zahlenbereichen gruppieren wollen, wie z. B. nach HTTP-Statuscodes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ein Beispiel, das bisher nur mit einer <code>if<\/code>-else-Kette m\u00f6glich war:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> String <span class=\"hljs-title\">getHttpStatusMessage<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> code)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span> (code == <span class=\"hljs-number\">200<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"OK\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code == <span class=\"hljs-number\">400<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Bad request\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code == <span class=\"hljs-number\">404<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Not found\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code == <span class=\"hljs-number\">500<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Internal server error\"<\/span>;\n\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code &gt;= <span class=\"hljs-number\">100<\/span> &amp;&amp; code &lt; <span class=\"hljs-number\">200<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Informational\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code &gt;= <span class=\"hljs-number\">200<\/span> &amp;&amp; code &lt; <span class=\"hljs-number\">300<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Success\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code &gt;= <span class=\"hljs-number\">300<\/span> &amp;&amp; code &lt; <span class=\"hljs-number\">400<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Redirection\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code &gt;= <span class=\"hljs-number\">400<\/span> &amp;&amp; code &lt; <span class=\"hljs-number\">500<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Client error\"<\/span>;\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (code &gt;= <span class=\"hljs-number\">500<\/span> &amp;&amp; code &lt; <span class=\"hljs-number\">600<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Server error\"<\/span>;\n\n    <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Unknown code\"<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Diese Methode k\u00f6nnen wir in Zukunft \u2013 meiner Meinung nach deutlich \u00fcbersichtlicher \u2013 mit einem <code>switch<\/code> wie folgt schreiben:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> String <span class=\"hljs-title\">getHttpStatusMessage<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> code)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">switch<\/span> (code) {\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">200<\/span> -&gt; <span class=\"hljs-string\">\"OK\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">400<\/span> -&gt; <span class=\"hljs-string\">\"Bad request\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">404<\/span> -&gt; <span class=\"hljs-string\">\"Not found\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">500<\/span> -&gt; <span class=\"hljs-string\">\"Internal server error\"<\/span>;\n\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span> i when i &gt;= <span class=\"hljs-number\">100<\/span> &amp;&amp; i &lt; <span class=\"hljs-number\">200<\/span> -&gt; <span class=\"hljs-string\">\"Informational\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span> i when i &gt;= <span class=\"hljs-number\">200<\/span> &amp;&amp; i &lt; <span class=\"hljs-number\">300<\/span> -&gt; <span class=\"hljs-string\">\"Success\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span> i when i &gt;= <span class=\"hljs-number\">300<\/span> &amp;&amp; i &lt; <span class=\"hljs-number\">400<\/span> -&gt; <span class=\"hljs-string\">\"Redirection\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span> i when i &gt;= <span class=\"hljs-number\">400<\/span> &amp;&amp; i &lt; <span class=\"hljs-number\">500<\/span> -&gt; <span class=\"hljs-string\">\"Client error\"<\/span>;\n        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span> i when i &gt;= <span class=\"hljs-number\">500<\/span> &amp;&amp; i &lt; <span class=\"hljs-number\">600<\/span> -&gt; <span class=\"hljs-string\">\"Server error\"<\/span>;\n\n        <span class=\"hljs-keyword\">default<\/span> -&gt; <span class=\"hljs-string\">\"Unknown code\"<\/span>;\n    };\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"dominierende-und-dominierte-primitive-typen\">Dominierende und dominierte primitive Typen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei <code>switch<\/code> mit primitiven Typen m\u00fcssen wir \u2013 genau wie bei Objekttypen \u2013 das Prinzip der dominierenden und dominierten Typen beachten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein <em>dominierender<\/em> Typ ist einer, der alle Werte eines <em>dominierten<\/em> Typs darstellen kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Z. B. wird <code>byte<\/code> von <code>int<\/code> dominiert, da jedes <code>byte<\/code> auch als <code>int<\/code> dargestellt werden kann. Schau dir einmal den folgenden Code an.<\/p>\n\n\n\n<div class=\"wp-block-uagb-container uagb-block-8ae4ca2e alignfull uagb-is-root-container\">\n<div class=\"uagb-block-b769b372 uagb-infobox__content-wrap  uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-mobile uagb-infobox-image-valign-top  wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-icon-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z\"><\/path><\/svg><\/div><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><\/div><p class=\"uagb-ifb-desc\">In den folgenden Beispielen habe ich die in <a href=\"\/de\/java\/java-22-features\/#unnamed-variables-patterns-jep-456\">Java 22<\/a> finalisierte unbenannte Variable <code>_<\/code> (den Unterstrich) verwendet.<\/p><\/div><\/div><\/div>\n<\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">double<\/span> value = . . .\n<span class=\"hljs-keyword\">switch<\/span> (value) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span>    _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof int\"<\/span>);    <span class=\"hljs-comment\">\/\/ dominating type<\/span>\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">byte<\/span>   _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof byte\"<\/span>);   <span class=\"hljs-comment\">\/\/ dominated type<\/span>\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">double<\/span> _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof double\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das <code>case byte<\/code>-Label w\u00fcrde in diesem Fall niemals matchen, da jedes <code>byte<\/code> auch ein <code>int<\/code> ist und somit bereits vom <code>case int<\/code>-Label abgefangen werden w\u00fcrde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn du versuchen w\u00fcrdest, diesen Code zu kompilieren, w\u00fcrde das zu folgendem Compilerfehler f\u00fchren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\"> error: this case label is dominated by a preceding case label\n      case byte   _ -&gt; IO.println(value + \" instanceof byte\");\n           ^<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Generell gilt: Ein dominierter Typ muss immer <em>vor<\/em> einem dominierenden Typ aufgef\u00fchrt sein. Folgendes ist also OK:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">double<\/span> value = . . .\n<span class=\"hljs-keyword\">switch<\/span> (value) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">byte<\/span>   _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof byte\"<\/span>);   <span class=\"hljs-comment\">\/\/ dominated type<\/span>\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span>    _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof int\"<\/span>);    <span class=\"hljs-comment\">\/\/ dominating type<\/span>\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">double<\/span> _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof double\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das gilt auch f\u00fcr die Kombination aus Konstanten und Pattern. In folgendem Beispiel muss <code>case 16_777_216<\/code> vor <code>case float<\/code> stehen, da dieser Wert sonst durch <code>case float<\/code> abgefangen werden w\u00fcrde (dieser Fall wird erst seit <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-26-features\/#primitive-types-in-patterns-instanceof-and-switch-fourth-preview-jep-530\">Java 26<\/a> gepr\u00fcft):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> value = . . .\n<span class=\"hljs-keyword\">switch<\/span> (value) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">16_777_216<\/span> -&gt; . . .  <span class=\"hljs-comment\">\/\/ dominated type<\/span>\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">float<\/span> f    -&gt; . . .  <span class=\"hljs-comment\">\/\/ dominating type<\/span>\n    <span class=\"hljs-keyword\">default<\/span>         -&gt; . . .\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"vollstaendigkeitspruefung-bei-switch\">Vollst\u00e4ndigkeitspr\u00fcfung bei switch<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei allen neuen (d. h. bei allen seit Java 21 hinzugekommenen) <code>switch<\/code>-Features gilt: der <code>switch<\/code> muss vollst\u00e4ndig sein, es muss also f\u00fcr jeden m\u00f6glichen Wert des Selektor-Ausdrucks (im Beispiel die Variable <code>value<\/code>) ein matchendes case-Label existieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deshalb enthielten die vorherigen Beispiele auch ein <code>case double<\/code>-Label. Folgendes w\u00e4re <em>nicht<\/em> erlaubt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">double<\/span> value = . . .\n<span class=\"hljs-keyword\">switch<\/span> (value) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">byte<\/span>   _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof byte\"<\/span>);\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span>    _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof int\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Dieser <code>switch<\/code> ist unvollst\u00e4ndig und damit ung\u00fcltig, da z. B. f\u00fcr den Wert 3,5 kein <code>case<\/code>-Label matchen w\u00fcrde. Der Compiler w\u00fcrde dies mit folgendem Fehler quitieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">error: the switch statement does not cover all possible input values\n    switch (value) {\n    ^<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Folgender <code>switch<\/code> ist hingegen vollst\u00e4ndig:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">short<\/span> value = . . .\n<span class=\"hljs-keyword\">switch<\/span> (value) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">byte<\/span>   _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof byte\"<\/span>);\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-keyword\">int<\/span>    _ -&gt; IO.println(value + <span class=\"hljs-string\">\" instanceof int\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Hier gibt es zwar kein <code>case short<\/code>-Label, aber ein <code>case int<\/code>-Label, und gegen das matcht jeder m\u00f6gliche <code>short<\/code>-Wert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"verschachtelte-primitive-typ-pattern\">Verschachtelte primitive Typ-Pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lassen sich primitive Pattern auch verschachteln? Ja \u2013 und zwar in Record-Pattern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein kurzer R\u00fcckblick: Mit einem Record-Pattern kannst du einen Record in einem Schritt pr\u00fcfen und in seine Komponenten zerlegen. F\u00fcr den folgenden Record<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-function\">record <span class=\"hljs-title\">Point<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> x, <span class=\"hljs-keyword\">int<\/span> y)<\/span> <\/span>{}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">sieht das z. B. so aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Object obj = . . .\n<span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-function\">obj <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title\">Point<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> x, <span class=\"hljs-keyword\">int<\/span> y)<\/span>) <\/span>{\n    IO.println(<span class=\"hljs-string\">\"x = \"<\/span> + x + <span class=\"hljs-string\">\", y = \"<\/span> + y);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><code>int x<\/code> und <code>int y<\/code> sind hier verschachtelte Pattern \u2013 sie matchen die beiden Komponenten des <code>Point<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bisher mussten verschachtelte primitive Pattern den Typ der Komponente exakt benennen \u2013 f\u00fcr einen <code>int<\/code>-Wert also <code>int<\/code>. Mit dem neuen Feature gilt nun auch verschachtelt dieselbe Regel, die du aus den vorherigen Abschnitten kennst: Ein verschachteltes Pattern <code>B<\/code> matcht eine Komponente vom Typ <code>A<\/code> genau dann, wenn der pr\u00e4zise Wert der Komponente auch in einer Variablen vom Typ <code>B<\/code> gespeichert werden kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Damit kannst du beim Zerlegen direkt mitpr\u00fcfen, ob die Werte in einen kleineren Typ passen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Object obj = <span class=\"hljs-keyword\">new<\/span> Point(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">20<\/span>);\n<span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-function\">obj <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title\">Point<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">byte<\/span> x, <span class=\"hljs-keyword\">byte<\/span> y)<\/span>) <\/span>{\n    IO.println(<span class=\"hljs-string\">\"Beide Koordinaten passen in ein byte: \"<\/span> + x + <span class=\"hljs-string\">\", \"<\/span> + y);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den <code>Point(10, 20)<\/code> ist das der Fall \u2013 beide Werte liegen im Bereich von <code>byte<\/code> (-128 bis 127). F\u00fcr einen <code>Point(10, 1000)<\/code> w\u00fcrde das Pattern hingegen nicht matchen, da 1000 nicht in ein <code>byte<\/code> passt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Genau wie bei den Top-Level-Pattern funktioniert das nicht nur mit <code>instanceof<\/code>, sondern auch in <code>switch<\/code> \u2013 und du kannst verschachtelte primitive Pattern frei mit Referenztyp-Pattern in einem Record-Pattern kombinieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"historie\">Historie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Primitive Types in Patterns, instanceof, and switch<\/em> wurde in folgenden JDK Enhancement Proposals definiert:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java 23: <a href=\"https:\/\/openjdk.org\/jeps\/455\">JEP 455: Primitive Types in Patterns, instanceof, and switch (Preview)<\/a><\/li>\n\n\n\n<li>Java 24: <a href=\"https:\/\/openjdk.org\/jeps\/488\">JEP 488: Primitive Types in Patterns, instanceof, and switch (Second Preview)<\/a><\/li>\n\n\n\n<li>Java 25: <a href=\"https:\/\/openjdk.org\/jeps\/507\">JEP 507: Primitive Types in Patterns, instanceof, and switch (Third Preview)<\/a><\/li>\n\n\n\n<li>Java 26: <a href=\"https:\/\/openjdk.org\/jeps\/530\">JEP 530: Primitive Types in Patterns, instanceof, and switch (Fourth Preview)<\/a><\/li>\n\n\n\n<li>Java 27: <a href=\"https:\/\/openjdk.org\/jeps\/532\">JEP 532: Primitive Types in Patterns, instanceof, and switch (Fifth Preview)<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zusammenfassung\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mit der Option <code>--enable-preview<\/code> kannst du seit Java 23 das Feature \u201ePrimitive Types in Patterns, instanceof, and switch\u201c aktivieren. Damit kannst du mit <code>instanceof<\/code> und <code>switch<\/code> gegen primitive Typ-Pattern wie z. B. <code>int i<\/code> oder <code>double d<\/code> matchen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da es bei primitiven Typen keine Vererbung gibt, funktionieren primitive Pattern etwas anders als Pattern mit Referenztypen: eine Variable matcht ein primitives Pattern dann, wenn eine Variable des Zieltyps sie ohne Pr\u00e4zisionsverlust aufnehmen kann.<\/p>\n<aside><p>Wenn dir der Artikel weitergeholfen hat, w\u00fcrde ich mich sehr \u00fcber eine positive Bewertung auf meinem <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">ProvenExpert-Profil<\/a> freuen. Dein Feedback hilft mir, meine Inhalte weiter zu verbessern und motiviert mich, neue informative Artikel zu schreiben.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">Bewertung abgeben<\/a><\/p>\r\n                        <p>Du m\u00f6chtest \u00fcber alle neuen Java-Features auf dem Laufenden sein? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders-Newsletter anzumelden.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"#\" data-formkit-toggle=\"d8ee997126\">Newsletter-Anmeldung<\/a><\/p><\/aside>","protected":false},"excerpt":{"rendered":"<p>Wie k\u00f6nnen wir primitive Typen im Pattern Matching mit `instanceof` und `switch` verwenden? Wie unterscheiden sich primitive Typ-Pattern und Referenztyp-Pattern?<\/p>\n","protected":false},"author":1,"featured_media":42273,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Primitive Typ-Pattern bringen primitive Typen ins Pattern Matching. Erfahre, wie du sie ab Java 23 mit instanceof und switch nutzt \u2013 mit Beispielen.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"primitive typen im pattern matching,primitive type patterns,primitive Typ-Pattern,primitive typen in patterns","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":20227,"_post_count":0,"footnotes":""},"categories":[64],"tags":[179],"class_list":["post-42267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java-amber-de"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/12\/primitive-types-in-patterns-instanceof-switch.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Wie k\u00f6nnen wir primitive Typen im Pattern Matching mit `instanceof` und `switch` verwenden? Wie unterscheiden sich primitive Typ-Pattern und Referenztyp-Pattern?","public_identification_id":"16976636b78b44b1870d1b7810cd3fe2","private_identification_id":"35244ab7f40e494cbb9a74bd20ac12d0","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/42267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=42267"}],"version-history":[{"count":25,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/42267\/revisions"}],"predecessor-version":[{"id":56267,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/42267\/revisions\/56267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/42273"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=42267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=42267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=42267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}