2009-04-20 2 views
4

Javaの「write once、run anywhere」のパラダイムと、Javaチュートリアルでは、これが何かに依存しているというごくわずかなヒントなしに、すべてのプリミティブデータ型に明示的なビットサイズを指定するという事実を考えると、私はint常に32ビット。Javaでは、ビット単位の操作のプリミティブ型の特定のサイズを想定するのは安全ですか?

しかし、注意点はありますか? language specは値の範囲を定義しますが、内部表現については何も言及していません。しかし、int変数のビット単位の演算を行うコードがあります。これは32ビット幅の変数で、そのコードがすべてのアーキテクチャで安全かどうか疑問に思っていました

このタイプの質問には十分な詳細なリソースがありますか?

答えて

13

Javaコードは、ネイティブアーキテクチャに関係なく、常にintが32ビットであるかのように動作します。

整数型であるバイト、値短い、int型、および長い、ある8ビット、16ビット、32ビット:書において

は、また、表現について決定的であるa partあります64ビットの符号付き2の補数の整数、charの値はUTF-16コード単位を表す16ビットの符号なし整数です

+0

後で仕様を掘り下げて追加した後に引用符が見つかりました。 –

1

はい、Javaではsizeof演算子はありません。 JavaのでブルースEckel氏の思考による

  • short:16ビット
  • int:32ビット
  • long:64ビット

これらの値は変化しませんアーキテクチャ間。

1

あなたもJVM specsをチェックすることができる:各ビット演算は、オペコード(ISHL、IOR、IAND、など)です取得

6

Javaのプリミティブの動作は言語仕様に完全かつ正確に指定されている間、1があります注意:64ビットアーキテクチャーでは、intがワード単位で整列される可能性があります。つまり、intの配列(または64ビット以外のプリミティブ型)は、32ビットアーキテクチャの場合の2倍のメモリを消費する可能性があります。

-1

すでに答えがあるので答えは出ていませんが、私はこれがJavaの理由であると指摘したいと思いましたが、CやC++ではそうではありませんでした。Javaが仮想マシン(Java VMまたはJVM)。 JVMはどのマシンでも同じバイトコードを実行し、同じ内部構造を持っているため、すべてのマシンのプリミティブ型と同じサイズを持つようです。 CおよびC++は、特定の動作をエミュレートしようとせず、さまざまなマシン上のプロセッサ実装の気まぐれにさらされていました。

+0

言語がバイトコードにコンパイルされるかどうかと、クロスプラットフォームプリミティブサイズを持つかどうかは独立しています。 –

関連する問題