黑马程序员技术交流社区

标题: 全局静态变量怎么最后又变回去了? [打印本页]

作者: abc张强8    时间: 2014-6-30 11:33
标题: 全局静态变量怎么最后又变回去了?
本帖最后由 abc张强8 于 2014-6-30 16:58 编辑

package com.tz.test;
public class Test {
private static  int nums = 0;
public static void main(String[] args) {
  System.out.println("asd");
  nums = 2;testNums(nums);
  System.out.println(nums);//到这里nums怎么又变成2了?
}
public static void testNums(int nums) {
  nums++;
  System.out.println(nums+"qas");//到这里nums是3
}
}
作者: 燿陚√揚葳    时间: 2014-6-30 12:07
  1. public class Demo {
  2.        
  3.         private static  int nums = 0;
  4.         public static void main(String[] args) {
  5.                 //上面操作的都是成员变量,所以你最后打印的结果还是2
  6.                 System.out.println("asd");
  7.                   nums = 2;
  8.                   testNums(nums);//3
  9.                   System.out.println(nums);//2
  10.         }
  11.         public static void testNums(int nums) {//这里的nums是局部变量
  12.                   nums++;
  13.                   System.out.println(nums+"qas");
  14.                 }

  15. }
复制代码

作者: abc张强8    时间: 2014-6-30 12:17
燿陚√揚葳 发表于 2014-6-30 12:07

懂了,多谢
作者: 燿陚√揚葳    时间: 2014-6-30 12:30
abc张强8 发表于 2014-6-30 12:17
懂了,多谢

不客气......:)
作者: 寻得美好    时间: 2014-6-30 13:17
public class Demo {
        
        private static  int nums=0 ;
        public static void main(String[] args) {
                System.out.println("asd");
                nums = 2;
                testNums();//调用函数使静态变量nums自增1
                System.out.println(nums);//3
        }
       
        public static void testNums() {//这里的()中不用加int nums,int nums是又重新定义的一个局部变量,
                nums++;
                System.out.println(nums+"qas");
                       
                }

}
作者: abc张强8    时间: 2014-6-30 16:35
恩啊,我后面运行出来
作者: houyudong    时间: 2014-6-30 16:56
你调用方法testNums传入一个参数,其实传的是nums的一个副本,它本身是没有变化的,你只是在对他的副本进行了操作,而且你testNums里面的nums++,他其实是一个局部变量,你没有发现你在方法参数列表定义了一个局部变量,他和成员字段nums只是名字相同,两个变量之间没有任何关系的,你可以把方法的变量改变一下,这样容易理解、。而主方法里面打印的是成员字段,你给成员字段赋得值是2,打印当然也是2了
作者: 叶飞翔    时间: 2014-6-30 19:11
houyudong 发表于 2014-6-30 16:56
你调用方法testNums传入一个参数,其实传的是nums的一个副本,它本身是没有变化的,你只是在对他的副本进行 ...

对,对,就是这样。主要是参数名跟成员变量名定义的一样了,所以才容易引起误解。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2