Java - Größer-als mit merkwürdigem Ergebnis

Gast #5415027
Lesenswert?

Folgender Code:
1
if (Data.length > Settingconstants.MAX_DATA_SPI_MSG) {
2
  throw new ProtocolException("Data exceeds sizelimit.");
3
}

Data.length ist ein byte-Array und exakt so lang wie es die Beschränkung 
Settingconstants.MAX_DATA_SPI_MSG noch erlaubt (die Grenze liegt 
übrigens bei 2055). Die Exception dürfte also nicht kommen.

In drei von vier Fällen kommt sie auch nicht-im vierten allerdings 
schon. Und ich verstehe nicht, warum. (Wie gesagt, die 
Vergleichsparameter sind in allen vier Fällen identisch.)

Es handelt sich um mehrere jUnit-Tests, im Wesentlichen alle nur 
voneinander abkopiert. Das Einzige, was sich von Fall zu Fall ändert ist 
eine Enumeration, die die erlaubte Länge des Byte-Arrays nicht 
überschreitet. Der Debugger bestätigt mir bei einem Haltepunkt in der 
if-Abfrage auch daß beide Parameter so sind wie sie sein sollen.

Settingconstants.MAX_DATA_SPI_MSG ist vom Typ short, mit einem Cast nach 
int klappt es allerdings auch nicht.

Hat jemand eine Idee was da schief geht?
Gast #5415029
Lesenswert?

Verzeihung, das hier:

Wühlhase schrieb:
> Es handelt sich um mehrere jUnit-Tests, im Wesentlichen alle nur
> voneinander abkopiert. Das Einzige, was sich von Fall zu Fall ändert ist
> eine Enumeration, die die erlaubte Länge des Byte-Arrays nicht
> überschreitet.

sollge eigentlich lauten:

Es handelt sich um mehrere jUnit-Tests, im Wesentlichen alle nur
voneinander abkopiert. Das Einzige, was sich von Fall zu Fall ändert ist
eine Enumeration, die die erlaubte Länge des Byte-Arrays nicht
verändert.
(Firma: privatfrickler.de) #5416085
Lesenswert?

Hallo,

Wühlhase schrieb:
> Folgender Code:
>
>
1
> if (Data.length > Settingconstants.MAX_DATA_SPI_MSG) {
2
>   throw new ProtocolException("Data exceeds sizelimit.");
3
> }
4
>
>
> Data.length ist ein byte-Array

das glaube ich nicht.

> In drei von vier Fällen kommt sie auch nicht-im vierten allerdings
> schon. Und ich verstehe nicht, warum. (Wie gesagt, die
> Vergleichsparameter sind in allen vier Fällen identisch.)

warum gibst Du bei der Exception nicht einfach die Werte von Data.length 
und Settingconstants.MAX_DATA_SPI_MSG mit aus? Dann würdest Du vermutl. 
sehen, dass der > Operator einwandfrei funktioniert und du woanders 
einen Fehler hast.

Wäre es C++ würde ich auf einen Schreibzugriff außerhalb der 
array-Grenzen tippen, ob sowas in Java auch geht, weiß ich aber nicht.

vlg
 TImm
Gast #5416781
Lesenswert?

Danke fürs Kopfzerbrechen-es läuft nun (und es lag natürlich nicht an 
dem Vergleich). Auf den hab ich mich gestürzt weil die Meldung vom 
Debugger darauf schließen ließ.

Es lag an der Methode, die die Enumeration in einen brauchbaren Wert 
übersetzen soll für die ich noch keinen Test geschrieben habe. In dieser 
hab ich schlicht einen Case vergessen...

Mal eine andere Frage: Benutzt irgendwer hier die 
Rubber-Duck-Debugging-Methode?
Gast #5417153
Lesenswert?

Nein, man sieht sie nicht.
Aber man bekommt sie oft mit, wenn man sein Problem aus einer anderen 
Perspektive sieht.
Eine solch andere Perspektive nimmt man z.B. zwangsläufig ein, wenn man 
jmd. sein Problem erklärt, dabei ist es völlig wurscht mit wem oder was 
man redet da es auf dessen Rat weniger ankommt. (Dieser Thread hier war 
z.B. ein solcher Fall, was allerdings keineswegs böse gemeint ist.)

Da ich keinen Einzelplatz hab (und ich schätze, das haben die wenigsten 
hier) würde mich mal interessieren wie das andere machen. Schnattert ihr 
eure Kollegen voll oder geht ihr aufs Klo? Ich persönlich find beides 
nicht so richtig optimal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren