Wieso sagt Intellij hier "Condition 'i >= 0' is always 'true' "?

3 Antworten

Dass Variablen "wrappen" können, ist ein Nebeneffekt, der von Compilern in der Regel nicht berücksichtigt wird.

Sich auf das "Wrappen" zu verlassen, sollte man nur in extremen Ausnahmesituationen tun, wenn es wirklich nicht anders geht. Eine solche Ausnahmesituation liegt hier bei weitem nicht vor.

Vernünftig und empfehlenswert ist die Lösung von Cwmystwyth, also int verwenden und auf byte heruntercasten.

Scheint ein Bug zu sein, bei mir ist es auch so. Die Schleife funktioniert und du liegst mit deiner Annahme definitiv richtig.

Ich habe dazu mal ein YouTack-Issue erstellt, vielleicht hast du dazu noch ein paar Eränzungen: https://youtrack.jetbrains.com/issue/IDEA-283201

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung

Bei mir beschwert sich IntelliJ nicht...

Und selbst wenn es sich beschweren würde... Wenn du weißt, dass IntelliJ falsch liegt, ignoriere es doch einfach?

Mit einer Warnung von IntelliJ, lässt sich das Programm immer noch kompilieren...


MrAmazing2 
Beitragsersteller
 23.11.2021, 22:33

Stimmt auch wieder.

Stellt sich noch die Frage, ob ich den Bug an Intellij reporten sollte, oder ob das so gewollt ist. Hmm

0
Endivie02  23.11.2021, 22:35
@MrAmazing2

Ich nehme einfach mal an, dass IntelliJ einfach nur keinen Unterschied zwischen einem byte, short, int und long macht, um ein wenig Leistung beim Überprüfen deines Codes zu sparen

1
Endivie02  23.11.2021, 22:38
@MrAmazing2

Lustigerweise kannst du deinen Code so schreiben:

for(int i = 0; (byte) i >= 0; i++) {
   System.out.println(i);
}

Er funktioniert trotzdem genau so wie der, den du geschrieben hast, und IntelliJ gibt keinen Mucks von sich

1