-3

私はしばらくの間このコードで遊んでいましたが、最初は0に設定されていなかったにもかかわらず、このメソッド呼び出しが数値を返しているように見える理由がわかりません

public class MainProg {
    public static void main(String[] args) {
        FixedCapacitySizeOfStrings s = new FixedCapacitySizeOfStrings(3);
        System.out.println("(" + s.size() + " left on stack)");

    }
}

これはAPIコードです

public class FixedCapacitySizeOfStrings {
    private String[] a;
    private int N;  

    public FixedCapacitySizeOfStrings(int cap) {
        a = new String[cap];
    }

    public boolean isEmpty() {
        return N == 0;
    }

    public int size() {
        return N;  //why is this line doing the right thing?? N was never initialized to 0
    }

    public void push(String item) {
        a[N++] = item;
    }

    public String pop() {
        return a[--N];
    }
}
4

5 に答える 5

5

プリミティブ インスタンス変数は、デフォルトで 0 に初期化されます。これにはint、、、、、、longおよびが含まdoubleれます。(そして、すべての非プリミティブ インスタンス変数は に初期化されます)floatshortbytecharnull

インスタンス変数 (フィールド) のみに関するものであることに注意してください。ローカル変数は初期化されません。

于 2013-08-12T04:53:02.017 に答える
1

メソッド内にいるときは、変数を明示的に初期化する必要があります。メソッドの外側では、整数が初期化されるデフォルト値は暗黙的に 0 です。

したがって、整数がインスタンス変数 (クラス変数) として宣言されているため、その値N内で整数が割り当てられていなくても、暗黙的にゼロになります。FixedCapacitySizeOfStrings

ただし、整数sが明示的に値に設定されておらず、メソッド内で宣言されているため、テストケースは文句を言います。

于 2013-08-12T04:51:59.560 に答える
0

N はインスタンス変数であるため、 s.size()=0 となります。ご存知のように、値を修正する場合はデフォルト値があり、次のように記述します。

public int size() {

    return N=a.length;
         }

上記は正しい結果を与えます...

于 2013-08-12T05:41:19.873 に答える