{"id":2599,"date":"2014-01-03T14:45:05","date_gmt":"2014-01-03T12:45:05","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2599"},"modified":"2014-01-03T14:45:05","modified_gmt":"2014-01-03T12:45:05","slug":"berlauf-in-java-8-erkennen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2014\/01\/berlauf-in-java-8-erkennen\/","title":{"rendered":"&Uuml;berlauf in Java 8 erkennen"},"content":{"rendered":"<p>In Java 8 kommen neue Methoden hinzu, die eine \u00dcberlauferkennung erm\u00f6glichen. Die Methoden gibt es in Math und StrictMath: <\/p>\n<p>class java.lang.Math <\/p>\n<p>class java.lang.<b>StrictMath<\/b> <\/p>\n<p>\u00b7 static int addExact(int x, int y) <\/p>\n<p>\u00b7 static long addExact(long x, long y) <\/p>\n<p>\u00b7 static int subtractExact(int x, int y) <\/p>\n<p>\u00b7 static long subtractExact(long x, long y) <\/p>\n<p>\u00b7 static int multiplyExact(int x, int y) <\/p>\n<p>\u00b7 static long multiplyExact(long x, long y) <\/p>\n<p>\u00b7 static int toIntExact(long value) <\/p>\n<p>Alle Methoden werfen eine ArithmeticException, falls die Operation nicht durchf\u00fchrbar ist, die letzte zum Beispiel, wenn (int)value != value ist. Leider deklariert Java keine Unterklassen wie UnderflowException oder OverflowException, und Java meldet nur alles vom Typ ArithmeticException mit der Fehlermeldung \u201exxx overflow\u201c, auch wenn es eigentlich ein Unterlauf ist. <\/p>\n<p>Beispiel: Von der kleinsten Ganzzahl mit subtractExact(\u2026) eins abzuziehen f\u00fchrt zur Ausnahme: <\/p>\n<p>subtractExact( Integer.MIN_VALUE, 1 ); \/\/ ArithmeticException <\/p>\n<p>In Math, aber nicht in StrictMath, gibt es weiterhin: <\/p>\n<p>class java.lang.Math <\/p>\n<p>\u00b7 static int incrementExact(int a) <\/p>\n<p>\u00b7 static long incrementExact(long a) <\/p>\n<p>\u00b7 static int decrementExact(int a) <\/p>\n<p>\u00b7 static long decrementExact(long a) <\/p>\n<p>\u00b7 static int negateExact(int a) <\/p>\n<p>\u00b7 static long negateExact(long a) <\/p>\n<p>Kann wegen des Wertebereiches die Operationen nicht durchgef\u00fchrt werden, folgt wieder eine ArithmeticException. <\/p>\n<p>Vergleich mit C#: C# verh\u00e4lt sich genauso wie Java und reagiert standardm\u00e4\u00dfig nicht auf \u00dcberlauf. Es gibt jedoch spezielle checked-Bl\u00f6cke, die eine OverflowException melden, wenn es bei arithmetischen Grundoperationen zu einem \u00dcberlauf kommt. Folgendes l\u00f6st diese Ausnahme aus: checked { int val = int.MaxValue; val++; }. Solche checked-Bl\u00f6cke gibt es in Java nicht, wer diese besondere \u00dcberlaufkontrolle braucht, muss die Methoden nutzen, und ein val++ dann auch umschreiben zu Math.addExact(val, 1) bzw. Math.incrementExact(val);<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Java 8 kommen neue Methoden hinzu, die eine \u00dcberlauferkennung erm\u00f6glichen. Die Methoden gibt es in Math und StrictMath: class java.lang.Math class java.lang.StrictMath \u00b7 static int addExact(int x, int y) \u00b7 static long addExact(long x, long y) \u00b7 static int subtractExact(int x, int y) \u00b7 static long subtractExact(long x, long y) \u00b7 static int multiplyExact(int [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,66],"tags":[],"class_list":["post-2599","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2599"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2599\/revisions"}],"predecessor-version":[{"id":2600,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2599\/revisions\/2600"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}