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。
答案 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.
}
}