web-dev-qa-db-ja.com

Java:用語の初期化、宣言、および割り当てを定義する

Defsが循環的で、主題は動詞で定義されていますが、動詞は未定義です!それでは、それらをどのように定義しますか?

円形の定義

初期化:変数を初期化します。宣言時に行うことができます。

assignment:は、変数に値を割り当てます。最終識別子で一度だけ、どこでも実行できます。

宣言:変数に値を宣言します。

[更新、ラムダ計算でトピックを理解しようとする]

D(x type) = (λx.x is declared with type) 
A(y D(x type)) = (λy.y is assigned to D(x type))

%Then after some beta reductions we get initialization.
D(x type) me human                  // "me" declared with type "human"
A(y (D(x type) me human)) asking    // "asking" assigned to the last declaration

%if the last two statemets are valid, an initialization exists. Right?
36
hhh

割り当て:変数の古い値を破棄し、新しい値に置き換えます

初期化:それは特別な種類の割り当てです:最初。初期化前のオブジェクトにはnull値があり、プリミティブ型には0falseなどのデフォルト値があります。宣言と組み合わせて実行できます。

宣言:宣言は、変数の型とその名前を示します。変数は一度しか宣言できません。これは、プログラマーが文字列値を整数変数に割り当てるなどのミスを回避するためにコンパイラーによって使用されます。変数の読み取りまたは割り当てを行う前に、その変数が宣言されている必要があります。

66
Silvio Donnini
String declaration;
String initialization = "initialization";
declaration = "initialization"; //late initialization - will initialize the variable.
    // Without this, for example, in Java, you will get a compile-time error if you try 
    // to use this variable.

declaration = "assignment"; // Normal assignment. 
    // Can be done any number of times for a non-final variable
61
John

宣言は、変数に「値」を宣言することではありません。変数のtypeを宣言することです。

割り当てとは、単に変数に値を格納することです。

初期化は、変数への値の割り当てです宣言時

これらの定義はフィールドにも適用されます。

int i;  // simple declaration
i = 42  // simple assignment

int[] arr = { 1, 2, 3 };
// declaration with initialization, allows special shorthand syntax for arrays

arr = { 4, 5, 6 }; // doesn't compile, special initializer syntax invalid here
arr = new int[] { 4, 5, 6 }; // simple assignment, compiles fine

ただし、「初期化」には、どこで発生するかに関係なく、「変数への最初の割り当て」の定義がより緩和されていることにも注意してください。

int i; // local variable declaration
if (something) i = 42;
System.out.println(i);
  // compile time error: The local variable i may not have been initialized

ただし、これはコンパイルします:

int i; // the following also compiles if i were declared final
if (something) i = 42;
else i = 666;
System.out.println(i);

ここで、iは、単純な割り当てによって、2つの可能な場所から「初期化」できます。そのため、iが配列であった場合、この構成では特別な配列初期化子の短縮構文を使用できません。

したがって、基本的に「初期化」には、コンテキストに応じて2つの可能な定義があります。

  • 最も狭い形式では、割り当てが宣言と組み合わされます。
    • 特に、特別な配列の簡略化された初期化子構文を使用できます。
  • より一般的には、変数に最初に割り当てが行われるときです。
    • 特に、複数の場所でfinal変数への割り当てが可能です。
      • コンパイラーは、これらの割り当ての1つが確実に発生するように最善を尽くして、final変数を「初期化」します。

JVMコンテキストクラスとインスタンスの初期化、OOPコンテキストオブジェクトの初期化などもあります。

9

以下にいくつかの例を挙げて簡単に説明します。

宣言:宣言は、名前を持つ変数を宣言するときであり、変数は1回しか宣言できません。

例:int x;String myName;Boolean myCondition;

初期化:初期化とは、変数に値を設定することです。これは、変数を宣言しているときに発生します。

例:int x = 7;String myName = "Emi";Boolean myCondition = false;

Assignment:割り当てとは、変数をすでに宣言または初期化しており、値を変更しているときです。変数の値は、必要に応じて何度でも変更できます。

例:

int x = 7; x = 12; .......値を変更しました。

String myName = "Emi"; myName = "John" .......値を変更しました。

Boolean myCondition = false; myCondition = true; .......値を変更しました。

注:メモリには、最後に入れた値が保存されます。

4
Emm

宣言:その型で新しい変数を定義するときはいつでも

割り当て:変数に新しい値を与えることで変数の値を変更するたび

初期化:宣言と一緒に行われる割り当て、または変数で行われる最初の割り当て。通常は、オブジェクトのコンストラクター呼び出しまたは変数の単純な割り当てです。

3
Jack

ステップ1:宣言:int a;

ステップ2:初期化:a = 5;

ステップ3:割り当て:a = b; (例:int b = 10; aは10になります)

1
user2934504

私はC/C++のバックグラウンドを持っていますが、アイデアは同じでなければなりません。

宣言 -変数が宣言されるとき、それはコンパイラにメモリの一部を取っておき、名前(および変数の型)をそれに関連付けるように指示しています。 C/C++では、次のようになります。

int x;

コンパイラーはこれを見て、xのアドレス位置を確保し、xで操作を実行するために使用するメソッドを認識します(異なる変数タイプは異なるアクセス操作を使用します)。このように、コンパイラが次の行に実行されると

x = 3 + 5;

整数値8(浮動小数点値8ではない)を「x」としても知られるメモリ位置に配置することを知っています。

割り当て -これは、以前に宣言した変数に値を詰め込むときです。割り当ては「等号」に関連付けられています。前の例では、変数「x」に値8が割り当てられました。

初期化 -これは、変数に値がプリセットされている場合です。変数の宣言中に変数がすべてデフォルト値に設定される保証はありません(明示的に設定しない限り)。初期化は変数の最初の割り当てであると言えますが、これは完全に真実ではありません。これについては後で説明します。典型的な初期化は、変数宣言と次の割り当てを組み合わせたものです。

int x = 6;

このような定数を扱う場合、初期化と割り当ての区別はより重要になります...

const int c = 15;

定数を扱う場合、宣言/初期化時にのみ値を割り当てることができます。そうでなければ、彼らは触れることができません。これは、定数がプログラムメモリとデータメモリに配置されることが多く、実際の割り当てがコンパイル時と実行時に発生するためです。

1
bill