質問: 0xFE ){ }else{ System.out.println( "else" ); } ``` ### 試したこと データの出力 -1, -2 となり、16進数に直すと0xFF、0xFEになります。バイナリエディタでも確認しています。 ### 補足情報(FW/ツールのバージョンなど) ソースで、bytes はバイト列の入った ArrayList です。 なお、ファイルはRaspbianでUTF-16を指定して保存してあります。
回答: Javaの数値リテラルはint型なので、byteに置き換えて比較してやる必要があるように思います。 ``` jshell> byte b = (byte)127; b ==> 127 jshell> b == 127 $2 ==> true jshell> byte b = (byte)128; b ==> -128 jshell> b == 128 $4 ==> false jshell> b == (byte)128 $5 ==> true ``` > > bytes はバイト列の入った ArrayList です。 > > > ということは、bytes.get(0)の型はbyteではなくByteですね? それならば等価演算子での比較は避けた方が良いでしょう。 ``` if(bytes.get(0).equals((byte)0xFE)) ...) { あるいは if(bytes.get(0).byteValue() == (byte)0xFE ...) { ``` byteで表せる範囲くらいキャッシュされているような気もしますが、いちおう。