初识Java(Java类和对象-对象的引用)

本文深入讲解Java中的对象管理,包括对象引用的概念、对象比较的方法(使用“==”运算符与equals()方法的区别)、以及对象销毁的过程,特别是Java的垃圾回收机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对象的引用

    在 Java 语言中尽管一切都可以看做对象,但真正的操作标识符实质上是一个引用,那么引用在 Java 中是如何体现的呢?

    语法 :类名  对象引用名称

    eg : Book book;

    通常一个引用不一定需要有一个对象相关联。

    引用与对象相关联的语法 : 

Book book = new Book();

    Book :类名

    book :对象

    new :创建对象操作符

    引用只是存放一个对象的内存地址,并非存放一个对象,严格地说引用和对象是不同的,但是可以将这种区别忽略,如可以简单地说 book 是 Book 类的一个对象,而事实上应该是 book 包含 Book 对象的一个引用。

二、对象的比较

    在 Java 语言中由两种对象的比较方法,分别为 “ == ”运算符与 equals() 方法。实质上这两种方式有着本质区别。

    eg :创建类,说明“ == ”运算符 与 equals() 方法的区别

public class Compare {
    public static void main(String[] args){
        String c1 = new String("abc");     //创建 String 型对象引用 c1
	String c2 = new String("abc");     //创建 String 型对象引用 c2
	String c3=c1;                      //将 c1 对象引用赋予 c3
	//使用 " == " 运算符比较 c2 与 c3
	System.out.println("c2==c3的运算结果为:"+(c2 == c3));
        //使用 " == " 运算符比较 c1 与 c3 
        System.out.println("c1 == c3 的运算结果为:"+(c1 == c3))
	//使用 equals() 方法比较 c2 与 c3 
	System.out.println("c2.equals(c3)的运算结果为:"+(c2.equals(c3)));
    }
}

    运行结果为 :

c2 == c3 的运算结果为:false
c1 == c3 的运算结果为:true
c2.equals(c3) 的运算结果为:true

    结果中可以看出,“ == ”运算符和 equals() 方法比较的内容是不同的, equals() 方法是 String 类中的方法,它用于比较两个对象引用所指的内容是否相等;而“ == ”运算符比较的是两个对象引用的地址是否相等。由于 c1 与 c2 是两个不同的对象引用,两者在内存中的位置不同,而 String c3 = c1 ;  语句将 c1 的引用赋给 c3 ,所以 c1 与 c3 这两个对象引用是相等的,也就是打印 c1 == c3  这样的语句将返回 true 值。

三、对象的销毁

    每个对象独有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收。在其他语言中西药手动回收废弃对象,但是 Java 拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的但占用内存的资源。

     主要有两种情况下的对象会被 Java 虚拟机视为垃圾:

    ( 1 )对象引用超过其作用范围,这个对象将被视为垃圾;

    如 :

{
Example e = new Example();
}
//在这个大括号外引用对象 e 

    ( 2 )将对象赋值为 null 。

    如 :

{
    Example e = new Example();
    e = null;                         //当对象被置为 null 时,将消亡
}

    虽然垃圾回收机制已经很完善,但垃圾回收器只能回收那些由  new  操作符创建的对象,如果某些对象不是通过  new  操作符在内存中获取一块内存区域,这种对象可能不能被垃圾回收机制所识别,所以在 Java 中提供了一个  finalize()  方法。这个方法时  Object  类的方法,它被声明为  protectd  ,用户可以在自已的类中定义这个方法。如果用户在类中定义了  finalize()  方法,在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时,才能真正回收被对象占用的内存。

    垃圾回收或  finalize()  方法不保证一定发生,如 Java 虚拟机内存损耗待尽时,它是不会执行垃圾回收的。

    由于垃圾回收不受人为控制,具体执行期间也不确定,所以 finalize()  方法也就无法执行,为此,Java  提供了 System.gc()  方法强制启动垃圾回收器,告知垃圾回收器进行清理。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值