---
title: 'Überlauf in Java 8 erkennen'
url: 'https://www.tutego.de/blog/javainsel/2014/01/berlauf-in-java-8-erkennen'
markdown: 'https://www.tutego.de/blog/javainsel/2014/01/berlauf-in-java-8-erkennen.md'
date: '2014-01-03'
description: 'In Java 8 kommen neue Methoden hinzu, die eine Überlauferkennung ermöglichen. Die Methoden gibt es in Math und StrictMath: class java.lang.Math class java.lang.StrictMath · static int addExact(int x, int y) static long addExact(long x, long y) · static int subtractExact(int x, int y) static long…'
taxonomy:
  category:
    - Insel
    - 'Java 8'
---

# Überlauf in Java 8 erkennen

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## Überlauf in Java 8 erkennen

03.01.2014 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

In Java 8 kommen neue Methoden hinzu, die eine Überlauferkennung ermöglichen. Die Methoden gibt es in Math und StrictMath:

class `java.lang.Math`

class `java.lang`.**StrictMath**

```java
· static int addExact(int x, int y)
```

- `static long addExact(long x, long y)`

```java
· static int subtractExact(int x, int y)
```

- `static long subtractExact(long x, long y)`

```java
· static int multiplyExact(int x, int y)
```

- `static long multiplyExact(long x, long y)`

```java
· static int toIntExact(long value)
```

Alle Methoden werfen eine `ArithmeticException`, falls die Operation nicht durchführbar 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 „xxx overflow“, auch wenn es eigentlich ein Unterlauf ist.

Beispiel: Von der kleinsten Ganzzahl mit `subtractExact(…)` eins abzuziehen führt zur Ausnahme:

```
subtractExact( Integer.MIN_VALUE, 1 ); // ArithmeticException
```

In Math, aber nicht in StrictMath, gibt es weiterhin:

class `java.lang.Math`

```java
· static int incrementExact(int a)
```

- `static long incrementExact(long a)`

```java
· static int decrementExact(int a)
```

- `static long decrementExact(long a)`

```java
· static int negateExact(int a)
```

- `static long negateExact(long a)`

Kann wegen des Wertebereiches die Operationen nicht durchgeführt werden, folgt wieder eine `ArithmeticException`.

```java
Vergleich mit C#: C# verhält sich genauso wie Java und reagiert standardmäßig nicht auf Überlauf. Es gibt jedoch spezielle checked-Blöcke, die eine OverflowException melden, wenn es bei arithmetischen Grundoperationen zu einem Überlauf kommt. Folgendes löst diese Ausnahme aus: checked { int val = int.MaxValue; val++; }. Solche checked-Blöcke gibt es in Java nicht, wer diese besondere Überlaufkontrolle braucht, muss die Methoden nutzen, und ein val++ dann auch umschreiben zu Math.addExact(val, 1) bzw. Math.incrementExact(val);
```

Kategorien: [Insel](https://www.tutego.de/blog/javainsel/category/insel/), [Java 8](https://www.tutego.de/blog/javainsel/category/java-8/)

## 1 Kommentare

**joschi** · [03.01.2014 15:44](#comment-5461)

Schön zu sehen, dass viele Verbesserungen aus Google Guava in Java 8 gelandet sind, in diesem Fall also die \[Math Utilities\](https://code.google.com/p/guava-libraries/wiki/MathExplained).

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Math.nextUp(…) und nextDown(…)](https://www.tutego.de/blog/javainsel/2014/01/math-nextup-und-nextdown.md)
- Next: [Unterprozess-Status erfragen und das Ende einleiten](https://www.tutego.de/blog/javainsel/2014/01/unterprozess-status-erfragen-und-das-ende-einleiten.md)
