-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 中,所有方法参数都是按值传递的,即复制。因此,调用者看不到副本的更改。

要解决您的第二个问题,您可以在调用方使用 list.size() 。

于 2012-08-14T19:44:15.083 回答
2

我看到了两种方式

1)将's'作为静态变量并将其移动到类级别

2) 使用 getter/setter 为 list 和 int 创建类,并返回对象以进行 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中,传递给方法的参数是按值传递的。您需要创建一个全局变量或实例变量才能在其他方法中修改它。这就是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 回答