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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘松703 中级黑马   /  2013-12-19 17:46  /  1314 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Demo1 {
  2. int x = 12;

  3. public static void main(String[] args) {

  4. Demo1 d = new Demo1();
  5. d.method(5);
  6. }

  7. public void method(int x) {
  8. x += x;
  9. System.out.println(x);
  10. }

  11. }
复制代码

大家来看看输出的解雇应该是多少啊?

评分

参与人数 1黑马币 +10 收起 理由
乔兵 + 10

查看全部评分

6 个回复

倒序浏览
输出的是10!
回复 使用道具 举报
输出的是10;
在堆中你new了Demo1这个对象,假设有一个地址为0x123
在栈中存在一个引用对象d,这是,堆中就将地址为0x123赋给了d; 这时Demo1 d = new Demo1();创建完成
上面int x = 12;属于全局变量了,他在静态数据区中
method(int x)方法直接存在了方法区中
对象d调用方法区中的method(int x),传的值是5,方法中变量名x;
x+=x; 这个x会先在方法区中找到x,而且你穿的值是5;

当这个变量存在的时候,那么x就不需要再去栈中需找x了;
直接运算了

评分

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

查看全部评分

回复 使用道具 举报
输出结果为  10     程序读主函数,在堆中创建一片空间,并把地址赋值给d,后来d调用method方法,把method中的5赋给x,结果是5+5=10;
回复 使用道具 举报
  1. public class Test {
  2.         int x = 12;

  3.         public static void main(String[] args) {

  4.                 Test d = new Test();
  5.                 d.method(5);
  6.         }

  7.         public void method(int x) {
  8.                 x += x;
  9.                 System.out.println(x);
  10.         }

  11. }
复制代码
输出是10.
int x = 12; 这里是成员变量


public void method(int x) {
                x += x;
                System.out.println(x);
        }
这里的X是局部变量。

main方法等于创建了一个对象,调用了这个对象的方法。

在局部变量和成员变量名字相同的时候,局部变量优先级更高。所以这里的x+=x里面的x的值是5.

5+5 =10所以结果是10




评分

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

查看全部评分

回复 使用道具 举报
输出的是10
回复 使用道具 举报
当然结果是10罗。System.out.println(x);这条语句是定义在method(int x)方法里的 不可能访问到外面的的x的值;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马