2013-03-17 9 views
5

Ich bin verwirrt ... this static value gleich 5verwirrend Fall Verhalten mit einem java static int

user> java.awt.image.BufferedImage/TYPE_3BYTE_BGR 
5 

und eine Case-Anweisung sollte funktionieren wie diese

user> (case 5 
     5 "yes" 
     "huh?") 
"yes" 

aber warum es funktioniert so was? Warum passt es nicht zusammen?

user> (case java.awt.image.BufferedImage/TYPE_3BYTE_BGR 
      java.awt.image.BufferedImage/TYPE_3BYTE_BGR "yes" 
      "huh?") 
"huh?" 

Antwort

6

Die test-constant s in einem case Ausdruck nicht ausgewertet. Ihre Aussage testet also, ob die Nummer 5 mit dem Symbol java.awt.image.BufferedImage/TYPE_3BYTE_BGR übereinstimmt. Da dies nicht der Fall ist, fällt es auf die Standardklausel.

+0

Vielen Dank. Das scheint Dinge zu erklären. Ich nehme an, ich muss cond. Es sei denn, Sie kennen einen Weg, dieses zusätzliche Bit Syntax zu vermeiden ... –

+0

Nein, 'cond' ist der Weg zu gehen. – Barmar

+0

Sie können eine Makroerweiterung verwenden, um die Symbole zur Kompilierzeit in Konstanten auszuwerten, wenn Sie wirklich .... wahrscheinlich nicht wert, aber nützlich sein können, wenn dies eine Syntax ist, die Sie viel verwenden werden. – mikera