Java 有人能帮我理解这两个节目吗?
方案1: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 {
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
。您能详细解释一下吗?只需将函数的返回值赋给另一个变量,输出就会改变吗?