黑马程序员技术交流社区

标题: 内存分析 [打印本页]

作者: 郑冬    时间: 2012-6-20 00:25
标题: 内存分析
class Point {
        double x, y, z;
       
        Point(double _x, double _y, double _z) {
                x = _x;
                y = _y;
                z = _z;
        }
       
        void setX(double _x) {
                x = _x;
        }
       
        double getDistance(Point p) {
                return (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z);
        }
       
}

public class TestPoint {
        public static void main(String[] args) {
                Point p = new Point(1.0, 2.0, 3.0);
                Point p1 = new Point(0.0, 0.0, 0.0);
                System.out.println(p.getDistance(p1));
               
                p.setX(5.0);
                System.out.println(p.getDistance(new Point(1.0, 1.0, 1.0)));
        }
}
这个程序中执行p.getDistance(p1)时,是在栈内存中创建一个p还是两个p?程序中方法的返回值会在栈内给分配空间吗?
作者: 陆强强    时间: 2012-6-20 07:25
p和p1都在栈内存,new Point(1.0, 2.0, 3.0)和new Point(0.0, 0.0, 0.0)都在堆内存。p指向new Point(1.0, 2.0, 3.0);p1指向new Point(0.0, 0.0, 0.0);
p.getDistance(p1)是把p1传给p,没有开辟空间。返回值返回给主函数,主函数在栈内存
作者: 龙秋地    时间: 2012-6-20 09:59
首先你的这个语句
  1. Point p = new Point(1.0, 2.0, 3.0);
  2.          Point p1 = new Point(0.0, 0.0, 0.0);
复制代码
已经表示在栈内存中有两个引用p和p1.
而且new出两个新对象在堆内存中.
而且成员方法和成员变量(基本数据类型)也在栈内存中.
所以当你执行p.getDistance(p1)时,已经有两个引用了,就是p个p1.
因为getDistance()方法在主函数中调用,主函数在栈内存中,返回值也是在栈内存中.

栈堆.jpg (44.81 KB, 下载次数: 47)

栈堆.jpg





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