黑马程序员技术交流社区

标题: 一道java面试题 [打印本页]

作者: 小穿钉    时间: 2015-10-24 21:46
标题: 一道java面试题
本帖最后由 小穿钉 于 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);
        }
}

作者: 小穿钉    时间: 2015-10-24 21:57
答案是:m.x=4   m.y=5
              n.x=9    n.y=7


判断:答案对不对??

作者: 疯狂的小豆丁    时间: 2015-10-25 11:08
运行下不就行了?不对的,n.x = 6  n.y = 10
作者: 大地z灵    时间: 2015-10-26 16:16
结果n.x和n.y都是10,是因为y是用静态修饰的,被共享的吗?
作者: zhy阿狸    时间: 2015-10-26 17:30
知道为什么了吗?
作者: syb012    时间: 2015-10-26 19:10
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


作者: chaoslu    时间: 2015-10-26 21:09
4 10
6 10

作者: kongminggg    时间: 2015-10-26 21:13
test.y?x.x??什么意思
作者: kongminggg    时间: 2015-10-26 21:19
教教我吧
作者: 爨oooo    时间: 2015-10-26 21:26
这是面试自己写还是让你写




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