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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小穿钉 高级黑马   /  2015-10-24 21:46  /  590 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小穿钉 于 2015-10-24 22:44 编辑

class Test{
        public int x=1;
        public static int y=1;
}
public class Test1{
        public static void main(String[] args){
                Test.y=Test.y+1;
                Test m=new Test();
                Test n=new Test();
                m.x=m.x+3;
                m.y=m.y+3;
                n.x=n.x+5;
                n.y=n.y+5;
                System.out.println("m.x="+m.x+""+"m.y="+m.y);
                System.out.println("n.x="+n.x+""+"n.y="+n.y);
        }
}

10 个回复

倒序浏览
答案是:m.x=4   m.y=5
              n.x=9    n.y=7


判断:答案对不对??
回复 使用道具 举报
运行下不就行了?不对的,n.x = 6  n.y = 10
回复 使用道具 举报
结果n.x和n.y都是10,是因为y是用静态修饰的,被共享的吗?
回复 使用道具 举报
知道为什么了吗?
回复 使用道具 举报
m.x=4   m.y=10
n.x=6    n.y=10

x是非静态变量,存储在堆内存中,m、n所指向的x是两个对象中的两个变量,初始化值都是1,然后再各自加3和5

y是静态变量,存储在方法区中,m、n所指向对象中的y在同一个地方存储(是同一个变量),所有会引起y变化的语句运行完后y就不会再变了。最后不论是对象m还是对象n,所指向的y的值都是10

点评

同意  发表于 2015-10-26 22:00
回复 使用道具 举报
chaoslu 初级黑马 2015-10-26 21:09:09
7#
4 10
6 10
回复 使用道具 举报
test.y?x.x??什么意思
回复 使用道具 举报
教教我吧
回复 使用道具 举报
这是面试自己写还是让你写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马