21

クラス属性の定義と初期化に違いはありますか? どちらか一方をやりたい場合はありますか?

例:

次のコード スニペットは、私が意味する違いを指摘する必要があります。そこでプリミティブとオブジェクトを使用しています:

import Java.util.Random;

public class Something extends Activity {
    int integer;
    Random random = null;

    Something(){
        integer = 0;
        random = new Random();
        ....

対。

import Java.util.Random;

public class Something extends Activity {
    int integer = null;
    Random random;

    Something(){
        integer = 0;
        random = new Random();
        ....
4

3 に答える 3

20

nullまず、プリミティブはオブジェクト参照である単なるデータであるため、プリミティブを null に設定することはできません。コンパイルしようとするとint i = null、互換性のない型のエラーが発生します。

nullクラスで変数を宣言するときに 2 番目に変数を初期化する0ことは、Java のように冗長であり、プリミティブのデフォルトは0(またはfalse) であり、オブジェクト参照のデフォルトはnullです。これはローカル変数には当てはまりませんが、以下を試した場合、コンパイル時に初期化エラーが発生します。

 public static void main(String[] args)
 {
     int i;
     System.out.print(i);
 }

0orのデフォルト値に明示的に初期化することは無意味ですが、別のデフォルト値に設定したい場合は、たとえばデフォルト値を持つコンストラクターを作成できfalseますnull

public MyClass
{
   int theDate = 9;
   String day = "Tuesday";

   // This would return the default values of the class
   public MyClass()
   {
   }

   // Where as this would return the new String
   public MyClass (String aDiffDay)
   {
      day = aDiffDay;
   }
}
于 2013-07-09T04:32:39.837 に答える
2

ShankuとMorpheusは質問に正しく答えました。まず、プリミティブ int 変数 "integer" を null に設定すると、コンパイル エラーが発生します。オブジェクトに対してのみ実行できます。第二に、Shanku は、Java がインスタンス変数にデフォルト値を割り当てることは正しいです。これは、サンプル コードでは「整数」と「ランダム」です。インスタンス変数は、スコープ (パブリック、プライベート、保護、パッケージ) に応じて、クラス内またはクラス外で表示できます。

ただし、ローカル変数にはデフォルト値が割り当てられていません。たとえば、コンストラクターで "int height;" のような変数を割り当てた場合。ゼロに初期化されません。

Java 変数のドキュメント を読むことをお勧めします。変数について詳しく説明されています。さらに、Java チュートリアルも参照できます。これも優れた読み物です。

于 2013-07-09T04:34:08.317 に答える
1

Java では、初期化は言語仕様で明示的に定義されています。フィールドと配列コンポーネントの場合、アイテムが作成されると、システムによって次のデフォルト値に自動的に設定されます。

数値: 0 または 0.0

ブール値: false

オブジェクト参照: null

これは、フィールドを 0、false、または null (場合によっては) に明示的に設定する必要がなく、冗長であることを意味します。

于 2013-07-09T04:24:22.163 に答える