Java的引用与对象

引用与对象

引用可以被理解为一种指针,把它指向哪个对象,它就代表哪个对象。

/**声明一个引用mc,该引用的类型为Myclass类型,
*利用Myclass()方法创建了一个Myclass对象,
*把创建的myclass对象赋值给mc引用*/
Myclass mc = new Myclass();
/**引用的声明不一定被赋予一个对象,也可以是一个空引用*/
Myclass mc = null;

引用相等与对象相等的判断

引用相等与对象相等是两个完全不同的概念:
(1)引用是否相等的判断标准为两个引用是否指向同一个对象,判断方法为“引用1==引用2”,如果两个引用指向同一个对象,表达式的值为true,否则为false
(2)两个对象相等的判断得使用equals()方法,Java中所有的类都继承了Object类的方法,当中的public boolean equals(Object o)方法用来判断目标o所引用的对象与当前对象是否相等,如果相等则返回ture,不相等则返回false

package Liu;
class ObjectA{
	private int i;//私有属性i
	public ObjectA(int n) {      //带参数的对象构造方法
		i = n;
	}
	public boolean equals(Object o) {         //重写equals方法
		if(o instanceof ObjectA) {
			if(i == ((ObjectA) o).i)
				return true;
		}
		return false;
	}
}
public class ObjectEquals {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ObjectA r1 = new ObjectA(1);
		ObjectA r2 = r1;
		System.out.println("r1,r2为同一对象时:");    //r1,r2为同一对象时
		System.out.println("r2 == r1:" + (r2 == r1));
		System.out.println("r2.equals(r1):" + (r2.equals(r1)));
		r2 = new ObjectA(1);
		System.out.println("r1,r2为不同对象但是对象相等时:");    //r1,r2为不同对象但是对象相等时
		System.out.println("r2 == r1:" + (r2 == r1));
		System.out.println("r2.equals(r1):" + (r2.equals(r1)));
		r2 = new ObjectA(2);
		System.out.println("r1,r2为不同对象时:");    //r1,r2为不同对象时
		System.out.println("r2 == r1:" + (r2 == r1));
		System.out.println("r2.equals(r1):" + (r2.equals(r1)));
	}

}
/**输出如下:
 * r1,r2为同一对象时:
*r2 == r1:true
*r2.equals(r1):true
*r1,r2为不同对象但是对象相等时:
*r2 == r1:false
*r2.equals(r1):true
*r1,r2为不同对象时:
*r2 == r1:false
*r2.equals(r1):false
*/

上述代码能够很好的说明引用比较和对象比较在本质上的不同,引用是否相等是指引用的对象是否为同一个对象,对象是否相等是指对象是否完全相同,引用相等一定能得出对象相等,对象相等不一定引用相等

对象的销毁与内存回收

当内存不足或者调用System.gc()方法时,Java内置垃圾清理器会释放所有不可用的对象内存

Java如何判断对象已弃用

每个对象都用被引用的次数记录,当对象的引用次数为0时,该对象就成了不可用对象,发生垃圾清理时会释放掉对象内存。

垃圾清理器finalize()方法

在对象被垃圾清理器清理时,也许会设计并执行一些代码来释放该对象的相关资源,finalize()方法就提供了这样的功能,在类中可以重写该方法或者直接调用该方法来进行垃圾清理。

System.gc()方法

除非调用System.gc()方法,否则Java内部垃圾清理器只在内存不足的时候才会清理不可用的对象

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值