9

C では、次のように記述できます。

#define LOWER 0

Java では、次のように記述できます。

static int lower = 0;

これらのステートメントは、他のメソッドが変数をより低く使用できるようにするという同じ目的を持っていませんか?

4

8 に答える 8

4

それらはまったく異なります。定義は、C プリプロセッサが使用するコピー ペーストのようなものです。static は、Java クラスの属性修飾子です。静的属性は実行時に変更できます。

于 2013-10-02T21:10:02.407 に答える
0

静的、いいえ。

最終はい。

final int LOWER = 0;

final変数は一度だけ初期化できます。

static変数はインスタンスではなくクラスに属します。

でも

機能は似ているかもしれませんが、操作方法はまったく異なります。

最終的な変数は、まさに変数です。C(++)の A#defineは、ビルド時に実際に解釈され、それに応じてバイナリ出力を変更し、実行時に値を定数にします。

#defineより効率的です。

于 2013-10-02T21:07:26.593 に答える
0

in #define lower 0lower は変数ではありません。コンパイル時に、コード全体で使用されている場所lowerに置き換えられます。0

一方static int lower = 0;、変数を定義し、変数の値にアクセスするために実行時に実際のメモリ参照が行われます。これのプラス値は、コードで変更できます。

変更を避けるために、次のように定義できますstatic final int lower = 0;

最近のコンパイラは、最適化においてかなり良い仕事をしています。そのため、コンパイル時にこれのみlowerが に置き換えられ0ます。

#define lower 0したがって、C では同等であると「言う」ことしかできstatic final int lower = 0;ませんが、同じではありません。後者は最適化フェーズ中に交換されたためです。最適化がオフの場合、コンパイル時に置き換えられません。

これが役立つことを願っています。

于 2013-10-02T21:40:19.557 に答える
0

#defineはプリプロセッサ ディレクティブです。定義した値は、コンパイル前にコード内で言及されている場所にスワップされます。ただし、いくつかの落とし穴があります。他のグローバル変数と同様に、他の場所で同様の名前の変数と競合する可能性があります (とりわけ)。

定数が必要な場合は、const代わりに使用してください。

于 2013-10-02T21:15:30.540 に答える