-1

Java では、 の出力sは 0 です。その理由がわかりません。何らかの方法で s の正しい値 (ここでは 1000) を取得することは可能でしょうか?

public static void main(String args) {
    int s = 0;
    List<Integer> list = getList(s);
    System.out.println("s = " + s);
}

public static List<Integer> getList(int s) {

    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 1000; i++) {
        list.add(i); s++;
    }
}

C# では、私が間違っていなければ、変数が変更されることを示す記述子がありました..

私はlist.size()一般的に取得するつもりはありません!

4

4 に答える 4

4

Java では、すべてのメソッド引数は値 (コピー) で渡されます。そのため、コピーへの変更は呼び出し元には表示されません。

2 番目の質問に対処するには、呼び出し側で list.size() を使用するだけです。

于 2012-08-14T19:44:15.083 に答える
2

私には2つの方法が見えます

1) 's' を静的変数にして、クラス レベルに移動する

2) list と int の getter/setter を持つクラスを作成し、getList 呼び出しのオブジェクトを返します

public static MyWrapperObj getList(int s) {

   ......
return wrapperObj
}

class MyWrapperObj 
{
private List<Integer>;
private countS;
....
//getter/setters.
}
于 2012-08-14T19:40:58.223 に答える
2

Java では、パラメーターを参照渡しすることはできませんが、次のようにオブジェクトでラップできます。

class IntHolder {
        private int s;
        IntHolder(int s){
            this.s = s;
        }

        public void setS(int s){
            this.s = s;
        }

        public int getS(){
            return s;
        }

        public void increment(){
            s++;
        }
}

class Test{

  public static void main(String[] args) {
    IntHolder s = new IntHolder(0);
    List<Integer> list = getList(s);
    System.out.println("s = " + s.getS());
  }

  public static List<Integer> getList(IntHolder s) {

    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 1000; i++) {
        list.add(i); s.increment();
    }
    return list;
  }
}
于 2012-08-14T19:53:51.810 に答える
0

Java では、メソッドに渡される引数は値によって渡されます。他のメソッドで変更するには、sa グローバル変数またはインスタンス変数を作成する必要があります。これはまさに Java の仕組みです。例えば

public class Test{
     private int s;

     public Test(){
          s=0;
          increment();
          //print now will be 1000.
     }

     private void increment(){
          s = 1000;
     }
}
于 2012-08-14T19:43:26.283 に答える