为什么这不会改变价值

时间:2014-06-18 05:48:13

标签: java

public class SubiectLicentaTrei {
    public static void main(String args[]) {
        double d = 12.34;
        ScadeUnitate su = new ScadeUnitate();
        su.scadeUnitate(d);
        System.out.println(d);
    }
}

class ScadeUnitate {
    public void scadeUnitate(double d) {
        d = d - 1.0;
    }
}

当我期望11.34时,输出12.34。

3 个答案:

答案 0 :(得分:3)

Java是按值传递的

所以当你通过这里

ksu.scadeUnitate(d);

d将为pass-by-value,当您将其扣除此处

d = d - 1.0;

d不会引用值11.34。 但在out-of-scope

时会被销毁

<强>溶液

设置scadeUnitate方法的返回值

public double scadeUnitate(double d)

从返回值中获取引用的返回值。

d = su.scadeUnitate(d);

答案 1 :(得分:0)

原因d是原始局部变量,仅在scadeUnitate函数中保持新状态。您应该重新设计函数以返回新值,并使用d函数中的新值重新分配main

答案 2 :(得分:0)

在Java对对象的引用中,原语按值传递。

 public class SubiectLicentaTrei {
        public static void main(String args[]) {
            double d = 12.34; // local variable `d`'s value is 12.34                 
            ScadeUnitate su = new ScadeUnitate();
            su.scadeUnitate(d);  // passing 12.34 to constructor.
            System.out.println(d);
        }
    }

    class ScadeUnitate {
        public void scadeUnitate(double d) {  // another local variable `d` (different from original one). Also `d` is of a primitive type (`double`)
            d = d - 1.0;       // the second local variable d being changed. The first d is untouched.
        }
    }