java - 方法内语句的执行

标签 java

整个程序中if语句 block 执行后,如何出现“System.out.println("after method 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);

}

}

最佳答案

Java 是按值传递的,因此在 showValue() 中,您不会处理在 main() 中声明的 ab code> 而是处理副本。想想看,您甚至没有在任何地方重新分配 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 的副本,而不是更改 main()< 中定义的 n/.

<小时/>

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

  • 使用参数 ab = 98 调用函数。
  • 打印98(第一个打印语句)
  • 98 != 0,所以:(if-语句)
    • 使用参数 ab = ab/10 == 9 再次调用函数。
    • 打印9(第一个打印语句)
    • 9 != 0,所以:(if-语句)
      • 使用参数 ab = ab/10 == 0 再次调用函数。
      • 打印0(第一个打印语句)
      • 0 == 0,因此不要输入 if 语句。
      • 打印0(第二个打印语句)
    • 打印 ab,这里是 9(第二条打印语句)
  • 打印 ab,此处为 98(第二条打印语句)

关于java - 方法内语句的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802841/

相关文章:

java - mysql utf-8 从一台机器返回乱码

java - 如何在eclipse中访问图像文件(servlet/html)

java - 快速排序实现问题,数组已排序但未退出递归中断条件

java - 在java中读取文本文件时出现垃圾字符

java - Log4j : Creating/Modifying appenders at runtime, 日志文件重新创建但未附加

java - 自动委托(delegate) java 类的所有方法

java - 按 T​​AB 键填充 JTable

java - Camera2API : Session has been closed; further changes are illegal

java - 这段代码中是否存在资源(准备好的语句)泄漏?

java - Android 数据报套接字抛出 "NetworkOnMainThreadException"而不是 "SocketException"