【问题标题】:How to pass Integer wrapper class to a method in java?java - 如何将整数包装类传递给java中的方法?
【发布时间】:2011-07-25 04:56:22
【问题描述】:

Java 中的例子:

class A {
    private Integer x = new Integer(0);

    public void setValue(Integer q) {
        q = 20;
    }

    public void callX() {
       setValue(x);        // this does not set x to be 20, which is what i need. Is there a way?
    }
}

【问题讨论】:

    标签: java methods parameters reference


    【解决方案1】:

    您可以改用AtomicInteger,它是可变的:

    private AtomicInteger x = new AtomicInteger(0);
    
    public void setValue(AtomicInteger q) {
        q.set(20);
    }
    
    public void callX() {
        setValue(x);
    }
    

    【讨论】:

      【解决方案2】:

      你不能。

      包装器类型是不可变的,因此它们有效地模拟原始类型的行为:通过执行q = 20,您使参数q 指向Integer 的新实例,其值为20,但它不会改变调用方法中x引用的原始实例。

      【讨论】:

      • @tsubasa:到底是什么问题?
      • 此外,保存值 -128 到 127 的 Integer 对象被缓存,因此不会创建重复的包装对象。
      【解决方案3】:

      在 Java 中,这种行为会被认为非常令人困惑。通常是一个 setter,比如 setValue 接受一个值并且不会改变它的参数。 getter 通常用于返回一个值。

      顺便说一句:恕我直言,除非您有充分的理由,否则不要使用包装器。

      相反,您可能会做这样的事情。

      class A {
       public int getValue() {
          return 20;
       }
      
       public void callX() {
         int x = getValue(); // this sets x to be 20.
       }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 2013-01-28
        • 2013-10-04
        • 2012-11-13
        • 1970-01-01
        相关资源
        最近更新 更多