计划1:
public class ValAndRefTypes {
public static void main(String[] args) {
int x=5;
addOneTo(x);
System.out.println(x);
}
static int addOneTo(int num){
num=num++;
return(num);//Outputs 5
}
计划2:
public class ValAndRefType1 {
public static void main(String[] args) {
int a=2,b=3;
System.out.println("The sum is: " + Add(a,b));
}
static int Add(int num,int num1){
num++;
num1++;
return(num+num1); //Outputs 7
}
为什么第一个程序不输出变量'x'的递增值,但第二个程序输出变量'a'和'b'的递增值?
我还想问一下这是否与Value类型和Reference类型有任何关系。
TIA答案!
答案 0 :(得分:1)
有两个原因:
<强>首先强>
在第一个程序中,addOneTo
函数正在添加值并返回新值(好吧,尝试,但我们将在下面得到),但忽略了返回值: / p>
addOneTo(x);
您不会将新值分配给任何内容。将其分配回变量:
x = addOneTo(x);
而在第二个程序中,这是有效的,因为 使用返回的值。您将其作为输出的一部分包含在内:
System.out.println("The sum is: " + Add(a,b));
<强>第二强>
这一行非常误导,并且使正在实施的逻辑混乱:
num=num++;
num++
增加num
,但评估以前的num
值。因此,分配会导致返回先前的值。这可以改为:
num = ++num;
虽然这仍然无缘无故地掩盖逻辑。直接增加:
num++;
或者如果您更喜欢更明确:
num = num + 1;
在第二个例子中,这是你增加的方式:
num++;
num1++;
答案 1 :(得分:0)
在第一个程序中,您正在打印具有值5的“x”。仅调用函数不会更改“x”的值。如果要打印递增值,程序将如下所示:
public class ValAndRefTypes {
public static void main(String[] args) {
int x=5;
System.out.println(addOneTo(x));
}
static int addOneTo(int num){ NUM = NUM ++; return(num); //返回6而不是5 }
答案 2 :(得分:-1)
让我对程序1做一个小改动。你不能改变原语。
public static void main(String[] args) {
int x=5;
int y = addOneTo(x);
System.out.println(y);
}
static int addOneTo(int num){
num=num++;
return(num);
}