返回Java中的值

返回Java中的值,java,Java,我在理解相当基本的Java代码时遇到了一些困难,我不知道在编译x=2的最后是如何做到的。因为根据我的逻辑应该是4。守则本身: public class eksami_harjutused { public static int x=2; public static int y=2; public static void main(String[] args) { foo(bar(foo(x))); System.out.println

我在理解相当基本的Java代码时遇到了一些困难,我不知道在编译x=2的最后是如何做到的。因为根据我的逻辑应该是4。守则本身:

public class eksami_harjutused {

public static int x=2;
   public static int y=2;  

   public static void main(String[] args) {     
     foo(bar(foo(x)));      
     System.out.println("main x,y: "+x+" "+y);
   }  

   public static int foo(int x) {     
     x++;
     y++;   
     System.out.println("foo x,y: "+x+" "+y);
     return x;
   }

   public static int bar(int x) {
     int z=0, y=10, u=0;    
     --y;
     for(y=1; y<(x*x); y++) {
       for(z=1; z<x; z++) { 
         u++;
       }
     }
     System.out.println("bar x,y: "+x+" "+y);
     return z;       
   }           
}
公共类eksami_harjutused{ 公共静态int x=2; 公共静态int y=2; 公共静态void main(字符串[]args){ foo(bar)(foo(x)),; System.out.println(“主x,y:+x+”+y); } 公共静态intfoo(intx){ x++; y++; System.out.println(“foox,y:+x+”+y); 返回x; } 公共静态整数条(整数x){ int z=0,y=10,u=0; --y;
对于(y=1;y那么,
x
是通过值传递的-因为它是
int
类型,所以被调用函数中对
x
的任何修改都不会影响调用函数中的
x
。您可以考虑将
x
中的值的副本提供给被调用方,被调用方可以在不影响
x的情况下对其执行任何操作调用方范围内的de>

Java中的所有基元类型都是按值传递的,其余的则是按引用传递的(对象-注意数组是对象)

另一件事是
foo
bar
方法中变量隐藏的效果:
x
被声明为
foo
bar
的参数,因此类成员
x
被隐藏。对
foo
bar
方法中
x
的任何访问都将引用传入的参数,不是类成员
x

main
方法中打印的
x
的值来自类成员
x
,在程序执行过程中不会触及该值


相反,您可以看到变量
y
在对
foo
方法的两次调用中被修改了两次,因为
foo
方法中的
y
将引用类成员
y
bar
方法中的
y
引用在
bar
方法中声明的局部变量
y

那么,
x
是按值传递的-因为它是
int
类型,所以被调用函数中对
x
的任何修改都不会影响调用函数中的
x
。您可以考虑将
x
中的值的副本提供给被调用方,被调用方可以在不影响
x
的情况下对其执行任何操作在调用者的作用域中

Java中的所有基元类型都是按值传递的,其余的则是按引用传递的(对象-注意数组是对象)

另一件事是
foo
bar
方法中变量隐藏的效果:
x
被声明为
foo
bar
的参数,因此类成员
x
被隐藏。对
foo
bar
方法中
x
的任何访问都将引用传入的参数,不是类成员
x

main
方法中打印的
x
的值来自类成员
x
,在程序执行过程中不会触及该值


相反,您可以看到变量
y
在对
foo
方法的两次调用中被修改了两次,因为
foo
方法中的
y
将引用类成员
y
bar
方法中的
y
引用在
bar
方法中声明的局部变量
y

因为int是按值传递的,所以在foo()中不希望x递增。您可以尝试org.apache.commons.lang.mutable.MutableInt,因为Integer类也是不可变的。

因为int是按值传递的,所以在foo()中不希望x递增。您可以尝试org.apache.commons.lang.mutable.MutableInt,因为Integer类也是不可变的。

当您发布打印的日志时,它将帮助其他人。我建议您在调试器中单步执行代码。这样,您将能够看到每行代码的作用。当您发布打印的日志时,它将帮助其他人。我建议您单步执行通过调试器中的代码。这样,您将能够看到每行代码的作用。非常感谢您的解释,我不知道如何按值传递变量。非常感谢您的解释,我不知道如何按值传递变量。