A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© awkflf11 中级黑马   /  2014-3-26 11:44  /  1155 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        public static void main(String[] args)
        {
                int x = 6;
                show(x);
                System.out.println(x)
        }

        public static void show(int x)
        {
                x = 5;
        }
}

class Demo
{
        int x = 6;
        public static void main(String[] args)
        {
                Demo d = new Demo();
                d.x = 8;
                show(d);   
                System.out.println(d.x);
        }
        public static void show(Demo d)
        {
                d.x = 5;
        }
}


请问上面的两个结果是什么、、、???
我写的第一个结果是5,,怎么不对了

第二结果那???

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 Up↑Lee↗ 于 2014-3-26 11:58 编辑
  1. //class Demo
  2. //{
  3.         //public static void main(String[] args)
  4.         //{
  5.                 //int x = 6;
  6.                 //show(x);
  7.                 //System.out.println(x);
  8.         //}

  9.         //public static void show(int x)
  10.         //{
  11.                 //x = 5;
  12.         //}
  13. //}

  14. class Demo
  15. {
  16.         int x = 6;
  17.         public static void main(String[] args)
  18.         {
  19.                 Demo d = new Demo();
  20.                 d.x = 8;
  21.                 show(d);   
  22.                 System.out.println(d.x);
  23.         }
  24.         public static void show(Demo d)
  25.         {
  26.                 d.x = 5;
  27.         }
  28. }
复制代码
第一个结果为6
第二个函数结果为5
另外第七行忘记;

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 0 1
第一个6 第二个5
值传递和址传递的区别
回复 使用道具 举报
本帖最后由 李东梁 于 2014-3-26 12:01 编辑

代码分析应该一步一步进行,主函数是程序的入口,也就是说主函数成程序的开始。
第一个是6,没有疑问;

第二个如下:
  1. public static void main(String[] args)
  2.         {
  3.                 Demo d = new Demo();
  4.                 d.x = 8;
  5.                 show(d);   
  6.                 System.out.println(d.x);
  7.         }
复制代码

从这里面一步一步分析:
1.创建了一个对象;函数属性内初始化,d.x=8;
2.调用方法,传入的是对象,引用类型值,结果也是5!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
首先程序输出行缺少分号,再次。。因为show方法为静态,所以在程序加载的时候就运行了 并且只运行一次。也就是程序的初始化顺序是先初始化了静态方法show (此时将x初始化为5),然后再初始化 x=6.接着程序来到了静态方法show(x),因为静态方法只加载一次,所以这一次就不会执行了。然后就执行了打印功能。输出6.
  而第二个show方法操作的事实例对象的x值,那么你就需要等到实例化了才能执行show方法吧。
    不知道回答的对不对。各位讨论讨论啊。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
对于第一个程序,  Demo里面有两个方法,一个是main(),另一个是show(),因为show是静态的,所以show先执行,然后才是 main()执行,所以结果是6.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马