浅析Java 对象引用和对象本身

yizhihongxing

浅析 Java 对象引用和对象本身

在 Java 编程中,我们经常会涉及到对象的引用和对象本身的概念。这两者之间的关系非常密切,理解它们的作用和区别对于编写高质量的 Java 代码非常重要。

Java 对象引用

Java 中的对象引用指的是一个变量或表达式,该变量或表达式包含了对象的内存地址。简单来说,即是将对象的地址赋值给一个变量,以方便后续操作。

以下是一个简单的示例,演示了如何定义和使用一个 Java 对象引用:

String str = new String("Hello World!");

在上面的示例中,我们创建了一个字符串对象,并将其赋值给 str 变量,str 变量的值就是该对象的内存地址。

Java 对象本身

Java 中的对象本身指的是一个占用一定内存空间的数据结构,它包含了对象的所有成员变量和相关的方法。当我们使用 new 操作符创建一个对象时,Java 会在堆内存中分配一定的空间来存储这个对象,并返回该对象的引用。

以下是一个简单的示例,演示了如何定义和使用一个 Java 对象本身:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

Person person = new Person("Tom", 20);

在上面的示例中,我们定义了一个 Person 类,并使用 new 操作符创建了一个 Person 对象,并将其引用赋值给 person 变量。

对象引用和对象本身的关系

Java 对象引用和对象本身之间的关系如下:

  • 对象本身是占用内存的数据结构,对象引用则是指向该数据结构的指针。
  • 对象本身存在于堆内存中,而对象引用存在于栈内存中。
  • 当我们定义一个对象引用并将其赋值给某个对象时,这个对象引用就指向了该对象的内存地址。
  • 对象引用可以通过复制来传递,而对象本身只存在一份,无法直接复制。

示例说明

示例1:在方法中改变对象引用的值

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Test {
    public static void main(String[] args) {
        Person person = new Person("Tom", 20);
        changePerson(person);
        System.out.println(person.getName()); // 输出:Jerry
    }

    public static void changePerson(Person person) {
        person = new Person("Jerry", 30);
    }
}

在上面的示例中,我们创建了一个 Person 对象,并将其引用赋值给 person 变量。然后我们将 person 变量作为参数传递给 changePerson 方法中。在 changePerson 方法内部,我们又创建了一个新的 Person 对象,并将其引用赋值给了传入的参数 person,这里的 person 是一个新对象的引用,不是原对象的引用。因此在 main 方法内部打印 person.getName() 时,输出的是原来的值,即 "Tom"。

示例2:在方法中改变对象本身的值

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Test {
    public static void main(String[] args) {
        Person person = new Person("Tom", 20);
        changePerson(person);
        System.out.println(person.getName()); // 输出:Jerry
    }

    public static void changePerson(Person person) {
        person.setName("Jerry");
    }
}

在上面的示例中,我们同样创建了一个 Person 对象,并将其引用赋值给 person 变量。然后我们将 person 变量作为参数传递给 changePerson 方法中。在 changePerson 方法内部,我们调用了 person 对象的 setName 方法,将该对象的 name 属性值改变为了 "Jerry"。因此在 main 方法内部打印 person.getName() 时,输出的是 "Jerry"。

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

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 微信小程序路由跳转两种方式示例解析

    下面我将为你详细讲解“微信小程序路由跳转两种方式示例解析”的完整攻略。 一、前言 在微信小程序的开发中,跳转页面是非常常见的操作。本文将介绍微信小程序路由跳转的两种方式,分别是 wx.navigateTo 和 wx.redirectTo。 二、 wx.navigateTo wx.navigateTo 是保留当前页面,跳转到应用内的某个页面。该跳转方式支持返回…

    JavaScript 2023年6月11日
    00
  • JavaScript 数组some()和filter()的用法及区别

    本篇攻略将详细讲解 JavaScript 数组 some() 和 filter() 方法的用法及区别。在讲解之前,需要明确的是,这两个方法均适用于 JavaScript 数组对象,且均为对数组进行遍历和筛选的方法,但使用方式和作用有所不同。 一、JavaScript 数组 some() 方法 1.1 作用 JavaScript 数组 some() 方法用于检…

    JavaScript 2023年5月27日
    00
  • 巧用局部变量提升javascript性能

    当JavaScript代码执行时,会先根据作用域中的变量、函数、以及this等信息,创造出执行上下文,并形成可用的作用域链,接着才会开始执行代码。局部变量的定义在这个过程中扮演着重要的角色,局部变量能够有效地提升JavaScript代码的性能。 局部变量提升 JavaScript代码执行时,会遇到变量和函数的声明,JavaScript会预处理变量和函数声明,…

    JavaScript 2023年6月10日
    00
  • 利用css+原生js制作简单的钟表

    下面为您详细讲解“利用 CSS + 原生 JavaScript 制作简单的钟表”攻略。 准备工作 首先,我们需要准备以下工具: 代码编辑器:Visual Studio Code、Sublime Text、Atom 等。 网页浏览器:Chrome、Firefox、Safari 等。 制作步骤 接下来,我们按照以下步骤来制作简单的钟表: 1. HTML 结构 我…

    JavaScript 2023年5月27日
    00
  • JavaScript事件对象event用法分析

    下面是关于JavaScript事件对象(event)的详细解析: 一、什么是JavaScript事件对象(event) 在JavaScript中,事件是当HTML文档中发生某些特定行为时所发生的结果。比如用户单击了一个按钮、鼠标移动到某一个元素上等交互行为。这些都可以被JavaScript捕捉到,并进行相应的处理。在这些事件中,事件对象(event)是事件发…

    JavaScript 2023年6月10日
    00
  • 全面理解闭包机制

    下面我会详细讲解“全面理解闭包机制”的完整攻略。 什么是闭包 闭包(Closure)是指函数(function)可以访问其它函数中定义的变量(variable)。简单来说,闭包就是能够读取其他函数内部变量的函数。闭包是一种函数或者对象,包含了一个被引用的变量和一个用于引用该变量的函数。可以通过函数中返回一个函数来实现闭包,被返回的函数就可以访问到原函数中的变…

    JavaScript 2023年6月10日
    00
  • Javascript中的方法和匿名方法实例详解

    Javascript中的方法和匿名方法实例详解 在Javascript中,方法和匿名方法是非常常用的函数形式。本文将详细讲解这两种函数的概念,区别,用法和实例。 方法 概念 方法就是被绑定到某个对象上的函数,在一个对象上定义一个方法,就是在对象上添加一个函数属性。 语法 对象名.方法名 = function(参数) { // 函数体 } 其中,对象名就是方法…

    JavaScript 2023年6月10日
    00
  • 详解JavaScript RegExp对象

    详解JavaScript RegExp对象 正则表达式(RegExp对象)是JavaScript高级功能中最常用的功能之一。正则表达式用于模式匹配,可用于搜索、替换和验证文本。JavaScript中RegExp对象提供了正则表达式的操作和方法。在本攻略中,我们将深入了解RegExp对象。 RegExp对象 RegExp对象是用来解析正则表达式的工具。在Jav…

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