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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑冬 中级黑马   /  2012-6-20 00:25  /  1451 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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?程序中方法的返回值会在栈内给分配空间吗?

2 个回复

倒序浏览
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,没有开辟空间。返回值返回给主函数,主函数在栈内存
回复 使用道具 举报
首先你的这个语句
  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, 下载次数: 50)

栈堆.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马