Java 有人能帮我理解这两个节目吗?

Java 有人能帮我理解这两个节目吗?,java,Java,方案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 {

方案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”的增量值

我还想问,这是否与值类型和引用类型有关

蒂亚:我要答案

两个原因:

第一名:

在第一个程序中,
addOneTo
函数添加值并返回新值(好吧,尝试,但我们将在下面讨论),但返回的值被忽略:

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做一个小改动。你不能使原语变异

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);
}

在您的第一个程序中,您正在打印值为5的“x”。仅调用函数不会更改“x”的值。如果要打印递增值,程序如下所示:

public class ValAndRefTypes {

public static void main(String[] args) {
int x=5;
System.out.println(addOneTo(x));
}

静态int addOneTo(int num){ num=num++; return(num);//返回6而不是5
}

num是一种基本类型。您不能在函数范围之外对其进行更改。作为一个值返回。我相信这个想法是让代码按原样解释,而不是改变它使其更有意义。这似乎有点误导。您当然可以将
addOneTo(x)
的结果分配回
x
。您能详细解释一下吗?只需将函数的返回值赋给另一个变量,输出就会改变吗?