Java中的对象和对象引用实例浅析

yizhihongxing

让我们来详细讲解一下Java中的对象和对象引用实例浅析。

掌握对象和对象引用的基础概念

在Java中,对象是我们需要操作的数据实体。对象本身是占用内存空间的,所以我们需要引用来间接操作对象。对象引用指的是一个指针变量,它指向一个对象在内存中的位置。Java中的对象都是存储在堆内存中,而引用则可以存储在栈内存中。

对象的创建过程

对象的创建过程分为两个步骤:声明和实例化。

  1. 声明对象

在Java中,声明对象通常是通过类创建对象。例如:

public class Person {
    //...
}

Person person;

上述代码中,我们声明了一个Person类型的变量person,但是它还没有指向任何对象。

  1. 实例化对象

实例化对象是指分配内存空间来存储对象。在Java中,使用关键字new来实例化一个对象。例如:

public class Person {
    //...
}

Person person;
person = new Person();

上述代码中,我们实例化了一个Person对象,通过变量person来引用这个新建的对象。

对象引用的基本操作

对象引用的基本操作包括:对象的复制、对象引用的比较、对象的销毁。

  1. 对象的复制

对象的复制是指创建一个新的对象,该对象与原对象具有相同的属性和值。Java中的对象复制有两种方式:浅拷贝和深拷贝。

  • 浅拷贝

浅拷贝是指创建一个新的对象,并将原对象的属性值全部复制到新对象中。但是,对于引用类型的属性,拷贝的是对象引用地址,新对象与原对象共用同一份数据。示例代码如下:

public class Person {
    private String name;
    private int age;
    private Address address;
}

public class Address {
    private String province;
    private String city;
    private String street;
}

Person p1 = new Person();
Address addr = new Address();
addr.setProvince("北京");
addr.setCity("北京市");
addr.setStreet("海淀区中关村街道");
p1.setName("小明");
p1.setAge(18);
p1.setAddress(addr);

Person p2 = p1; // 对象引用赋值,p1和p2指向同一个对象
p1.setName("小红"); // 修改p1的name属性
System.out.println(p2.getName()); // 输出"小红",p1和p2指向同一个对象
  • 深拷贝

深拷贝是指创建一个新的对象,并将原对象的属性值全部复制到新对象中,包括引用类型的属性。深拷贝是完全独立的对象,与原对象没有任何关联。示例代码如下:

public class Person implements Cloneable {
    private String name;
    private int age;
    private Address address;

    public Person clone() throws CloneNotSupportedException {
        Person newPerson = (Person) super.clone();
        newPerson.address = address.clone();
        return newPerson;
    }
}

public class Address implements Cloneable {
    private String province;
    private String city;
    private String street;

    public Address clone() throws CloneNotSupportedException {
        return (Address) super.clone();
    }
}

// 测试代码
Person p1 = new Person();
Address addr = new Address();
addr.setProvince("北京");
addr.setCity("北京市");
addr.setStreet("海淀区中关村街道");
p1.setName("小明");
p1.setAge(18);
p1.setAddress(addr);

Person p2 = p1.clone(); // 深拷贝,p1和p2是完全独立的对象
p1.setName("小红"); // 修改p1的name属性
System.out.println(p2.getName()); // 输出"小明",p1和p2是完全独立的对象
  1. 对象引用的比较

对象引用的比较可以用==操作符或equals()方法来实现。

  • ==操作符

==操作符比较的是两个对象的地址是否相同,即判断两个引用是否指向同一个对象。示例代码如下:

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1 == s2); // 输出"true",s1和s2指向同一个对象
System.out.println(s1 == s3); // 输出"false",s1和s3指向不同的对象
  • equals()方法

equals()方法比较的是两个对象的内容是否相同,即判断两个对象的属性值是否相同。例如:

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1.equals(s2)); // 输出"true",s1和s2的属性值相同
System.out.println(s1.equals(s3)); // 输出"true",s1和s3的属性值相同
  1. 对象的销毁

在Java中,对象的销毁是由垃圾收集器来完成的。当程序无法访问一个对象时,该对象就成为了垃圾数据,垃圾收集器会自动回收这些垃圾数据所占的空间。

示例代码:

Person p1 = new Person();
p1 = null; // 将p1指向的对象设为null

上述代码中,将p1赋值为null,p1指向的Person对象就无法再被访问,成为垃圾数据。当垃圾收集器运行时,它会回收这个Person对象所占用的空间。

总结

以上就是对Java中的对象和对象引用实例的浅析。我们了解到对象和对象引用的概念、对象的创建过程、对象引用的基本操作等方面的知识点。在实际应用中,需要根据具体的场景实现对象引用的复制、比较和销毁等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的对象和对象引用实例浅析 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 深入理解spring boot 监控

    当我们使用Spring Boot构建应用程序时,性能问题通常会成为我们的关注点之一。 Spring Boot提供了一种称为Actuator的库,该库允许我们在Spring Boot应用程序中启用监控并轻松跟踪性能指标。 下面是一些深入理解Spring Boot监控的攻略: 1. 添加Actuator依赖 要使用Actuator,我们需要在Spring Boo…

    Java 2023年5月31日
    00
  • Spring JPA之save方法示例详解

    让我来为你详细讲解“Spring JPA之save方法示例详解”。 什么是Spring JPA Spring JPA是Spring框架中的一个模块,它提供了基于注解和接口的方式来简化数据库访问操作,让开发者可以更便捷地进行持久化操作。 save方法简介 save方法是Spring JPA中提供的一个方法,用于将一个实体对象保存到数据库中。它有两个重载方法,分…

    Java 2023年5月20日
    00
  • Java实现简单连连看游戏

    Java实现简单连连看游戏攻略 界面设计 在实现连连看的过程中,一般需要自己手动设计游戏的界面。一般的要求是需要一个界面来显示游戏的进度和得分,同时还需要一个游戏区域来进行游戏。 例如,在游戏区域中,我们可以用一个二维数组来表示每个格子上的图案。我们可以使用Java Swing来实现监测用户点击的事件,并根据用户的点击来判断该元素能否进行消除,然后在界面上进…

    Java 2023年5月19日
    00
  • java 中用split分割字符串,最后的空格等不被拆分的方法

    让我来详细讲解一下如何在Java中使用split方法分割字符串,同时可以让最后的空格等不被拆分。 1. 使用正则表达式指定分隔符 在Java中,使用split方法分割字符串时,可以通过正则表达式来指定字符串的分隔符。如果要保留最后的空格,可以在分隔符字符串中使用”\s*$”,表示以零个或多个空格结尾。具体的代码如下: String str = "T…

    Java 2023年5月27日
    00
  • JSP开发入门(一)–安装好你的机器来使用JSP

    一、安装JDK 1.1 下载与安装JDK 首先,我们需要下载安装Java Development Kit(JDK)。JDK是Java应用程序的基本开发工具,它包括了Java运行时环境(JRE),Java编译器,Java API文档和其他一些实用工具。JDK的下载地址为: https://www.oracle.com/java/technologies/jav…

    Java 2023年6月15日
    00
  • 在Ruby on Rails中使用AJAX的教程

    下面是“在Ruby on Rails中使用AJAX的教程”的完整攻略: 1.前言 在现代Web开发中,AJAX 技术已经成为了非常重要的一部分,能够为用户带来更好的用户体验。Ruby on Rails 作为一款现代的 Web 框架,自然也支持对 AJAX 的良好支持。 本文将介绍在 Ruby on Rails 中使用 AJAX 的相关技巧,包括控制器响应的格…

    Java 2023年6月15日
    00
  • Spring Boot统一异常处理详解

    下面将以“Spring Boot统一异常处理详解”为主题,为大家详细讲解该主题的完整攻略。 一、什么是 Spring Boot 统一异常处理 Spring Boot 统一异常处理指在 Spring Boot 应用程序中,通过设置全局异常处理器,来捕获和处理抛出的异常信息。通过统一异常处理,我们可以将系统中可能出现的各种异常信息进行分类、归纳和统一处理,并返回…

    Java 2023年5月26日
    00
  • java模拟post请求发送json的例子

    下面就详细讲解Java模拟POST请求发送JSON的例子的完整攻略。 步骤一:导入相关库 在Java程序中发送POST请求需要用到一些库,你需要在代码前导入这些库。 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; impor…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部