在方法内执行语句

时间:2013-09-14 14:36:45

标签: java

如何在整个程序中执行if block后,语句“System.out.println(”方法showValue \ t:“+ ab);”仍然能够获取以前的值?我以为这个陈述每次都会打印0但是没有发生?

public class Me{

public static void main(String[] args) {
    int ab=98;
    System.out.println(" value of ab in main at start\t:"+ab);
    Mno ref=new Mno();
    ref.showValue(ab);
    System.out.println("value of ab in Main After completion\t:"+ab);
}
}

class Mno{
    void showValue(int ab){
    System.out.println("Before method showvalue\t:"+ab);
    if (ab!=0){
        showValue(ab/10);}
    System.out.println("after method showValue\t:"+ab);

}

}

1 个答案:

答案 0 :(得分:3)

Java是按值传递的,因此在showValue()中,您不会处理ab中声明的main(),而是处理副本。想想看,你甚至没有在任何地方重新分配ab,那怎么可能改变?

在任何情况下,您都可以看到按价值传递概念:

public static void main(String[] args) {
    int n = 42;
    foo(n);
    System.out.println(n);
}

public static void foo(int n) {
    n = 0;
}
42

foo()中,我们会重新分配n的副本,而不是更改n中定义的main()


编辑我现在看到你问为什么showValue()中的第二个打印语句每次到达时都不打印0。为了了解原因,让我们手动执行函数调用。当您在showValue(ab)中调用main()时会发生这种情况:

  • 使用ab = 98
  • 参数调用函数
  • 打印98(第一印刷声明)
  • 98 != 0,所以:(if - 声明)
    • 使用ab = ab/10 == 9
    • 参数再次调用函数
    • 打印9(第一印刷声明)
    • 9 != 0,所以:(if - 声明)
      • 使用ab = ab/10 == 0
      • 参数再次调用函数
      • 打印0(第一印刷声明)
      • 0 == 0,所以请勿输入if - 声明。
      • 打印0(第二次打印声明)
    • 打印ab9此处。(第二次打印声明)
  • 打印ab98此处。(第二次打印声明)