欢迎来到我的博客

new 一个对象时的内存空间分配情况
	Person p1  = new Person(“Tom”,0);

 

20140410-2-1

如果把这条语句转变一下会更容易理解

	Person p1;
	p1 = new Person(“Tom”,0);

执行第一句的时候,会在内存的栈内存开辟一块空间,即图上面的p1,不过,此时p1内存空间的值为null,第二句new Person(“Tom”,0);会在堆空间开辟一块内存空间,并返回该堆空间的地址,然后赋值给p1;即,上图中p1的栈内存指向了右边的堆内存;

静态变量和静态方法在内存中分配情况
	Person p1 = new Person(“tom”,0);
	Person p2 = new Person(“cat”,10);

执行完上面的语句后,内存中的分配情况如下

20140410-2-2

由于,age是静态变量getName()是静态方法,属于所有对象共有,所以,在内存中只有一个副本,所有的Person对象共用,执行完第一句的时候,age的值为0,到了第二句,把age的值改为了10;

对象内存赋值的案例
	Person p1 = new Person(“tom”,0);
	Person p2 = p1;
	Person p1 = null;

 

20140410-2-3

执行第一句的时候,在栈空间创建了一个内存空间p1,在堆空间创建了Person对象,并把这个堆空间的地址返回给了p1,即p1指向了Person对象

执行第二句的时候,在栈空间创建了一个内存空间p2,并且把p1的值给了p2,即把Person对象的地址给了p2,所以p2也指向了Person对象 执行第三句的时候,让p1的值为null,即p1所占的栈空间的值为null,而Person对象的值没有改变,且p2仍然指向了Person对象

对象比较的内存分析
	Person p1 = new Person(“tom”,0);
	Person p2 = p1;
	Person p3 = new Person(“tom”,0);
	if(p1 == p2)
	{
	     System.out.printfln(“p1==p2");
	}
	if(p1 == p3)
	{
 	    System.out.println(“p1==p3");
	}

上面程序段的运行结果是

	p1==p2

20140410-2-4

上面是p1、p2、p3在内存中的分配情况,p1、p2、p3的值分别为右边所指对象的地址,p1、p2指向同一块地址,所以,p1和p2的值是相等的,即p1 == p2 为true ,p1和p3所指的对象不同,所以p1 == p3 的值为false

p1和p3所指的内存空间的值是相等的,那该怎么判断呢?

object类有一个equal方法,我们自己创建的类,可以重写这个方法,在这个方法里面判断,每个属性是否相等,java库中的类,可以直接调用equal方法。



本文转载于安卓杂谈网http://www.yee4.com/blog/124.html




 posted on 2014-04-28 18:38  七彩天空  阅读(355)  评论(0编辑  收藏  举报