如何在整个程序中执行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);
}
}
答案 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
(第二次打印声明)ab
,9
此处。(第二次打印声明)ab
,98
此处。(第二次打印声明)