2

「0620」などの時間を表すために文字列を使用するコードをいくつか書きましたが、慎重に検討した結果、比較パフォーマンスとストレージの向上のために、これらを short に解析できることに気付きました。

単体テストでは、これが機能することを期待して、620 の戻り値と比較される 0620 として短い記述があります。ただし、テスト0620 が 620 に等しい(両方ともショート) は失敗します。

エラーメッセージは、0620 が 400 として中断されたことを示しています (そして 400 != 620 は失敗を説明しています)。リード 0 を削除すると問題は解決しますが、知りたかったのですが、これで何が起こっているのでしょうか?

これは機能しません

assertEquals("Time Failed", 0620, st.GetTime());

この作品

assertEquals("Time Failed", 620, st.GetTime());
4

2 に答える 2

6

a で始まる整数リテラルは、 Java 言語仕様0に従って 8 進数 (基数 8) として解釈されます。

8 進数は、ASCII 数字 0 と、その後に続く 1 つ以上の ASCII 数字 0 ~ 7 で構成され、正、ゼロ、または負の整数を表すことができます。

これは、C から継承された Java の癖の 1 つだと思います。

于 2011-01-08T21:21:33.820 に答える
3

0620 は Java で 8 進数 (基数 8) を意味します。Android でも同じだと思います。または 0620 == 400 ではなく 620 です。

     int decVal = 26;   // The number 26, in decimal
     int octVal = 032;  // The number 26, in octal
     int hexVal = 0x1a; // The number 26, in hexadecimal

SUN/Oracle の Java チュートリアルの例

于 2011-01-08T21:21:29.430 に答える