黑马程序员技术交流社区
标题:
内存分析
[打印本页]
作者:
郑冬
时间:
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
首先你的这个语句
Point p = new Point(1.0, 2.0, 3.0);
Point p1 = new Point(0.0, 0.0, 0.0);
复制代码
已经表示在栈内存中有两个引用p和p1.
而且new出两个新对象在堆内存中.
而且成员方法和成员变量(基本数据类型)也在栈内存中.
所以当你执行p.getDistance(p1)时,已经有两个引用了,就是p个p1.
因为getDistance()方法在主函数中调用,主函数在栈内存中,返回值也是在栈内存中.
栈堆.jpg
(44.81 KB, 下载次数: 47)
下载附件
2012-6-20 09:59 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2