对鸿蒙 中 对象的理解

news/2025/2/26 8:11:49

鸿蒙中的对象概述

1. 对象的基本概念

在鸿蒙开发里,对象是类的实例。类是一种用户自定义的数据类型,它定义了对象的属性(数据)和方法(行为)。当创建一个类的实例时,就得到了一个对象。例如,在 Java 语言编写的鸿蒙应用中,你可以定义一个 Person 类,然后创建 Person 类的对象。

收起

java

// 定义一个 Person 类
class Person {
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter 和 Setter 方法
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

// 创建 Person 类的对象
Person person = new Person("Alice", 25);
2. 对象在鸿蒙开发中的应用场景

  • 界面开发:在鸿蒙的 UI 开发中,很多组件都是对象,如 TextButton 等。你可以通过创建这些组件的对象,并设置它们的属性和添加事件监听器来构建用户界面。

收起

java

// 创建一个 Text 组件对象
Text text = new Text(getContext());
text.setText("Hello, HarmonyOS!");

  • 数据处理:在处理数据时,常常会将数据封装到对象中,方便进行管理和操作。例如,将从数据库中查询到的数据封装到对应的实体类对象中。

对比两个对象是否相等的方法

1. 使用 == 运算符

在 Java 中,== 运算符用于比较两个对象的引用是否相等,即判断两个对象是否指向同一个内存地址。

收起

java

Person person1 = new Person("Alice", 25);
Person person2 = person1;
Person person3 = new Person("Alice", 25);

// 使用 == 运算符比较
boolean isSameReference1 = person1 == person2; // true,因为指向同一个内存地址
boolean isSameReference2 = person1 == person3; // false,因为指向不同的内存地址
在实际的开发中 

比如说  两个不同的接口   返回的对象是一样的    但是 你对比的时候 他们是不相等的  原因就是 他们的内存地址不一样

还比如   我们使用

forEach 循环一个数组的时候  将数组的对象  传递给一个组件的时候  在组建中接收   然后用原来的数据  去对比 时候数组中存在某一个对象的是时候   是不行的       原因也是 对象传递给组件的时候   

内存地址变化了     这个时候可以通过 对象的  某一唯一属性去对比

2. 重写 equals() 方法

equals() 方法在 Object 类中定义,默认情况下,它的实现和 == 运算符一样,比较的是对象的引用。但我们可以在自定义类中重写 equals() 方法,使其根据对象的属性值来判断两个对象是否相等。

收起

java

class Person {
    private String name;
    private int age;

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

    // 重写 equals 方法
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person other = (Person) obj;
        return age == other.age && (name == null ? other.name == null : name.equals(other.name));
    }
}

Person person1 = new Person("Alice", 25);
Person person2 = new Person("Alice", 25);

// 使用重写后的 equals 方法比较
boolean isEqual = person1.equals(person2); // true,因为属性值相同
3. 使用第三方库(如 Apache Commons Lang)

在一些复杂的场景中,手动编写 equals() 方法可能会比较繁琐,这时可以使用第三方库来简化操作。例如,Apache Commons Lang 库提供了 EqualsBuilder 类,可以方便地比较两个对象的属性值。

收起

java

import org.apache.commons.lang3.builder.EqualsBuilder;

class Person {
    private String name;
    private int age;

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

    // 使用 EqualsBuilder 重写 equals 方法
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (obj == this) {
            return true;
        }
        if (obj.getClass() != getClass()) {
            return false;
        }
        Person other = (Person) obj;
        return new EqualsBuilder()
              .append(name, other.name)
              .append(age, other.age)
              .isEquals();
    }
}

总结

在鸿蒙开发中,对象是类的实例,广泛应用于界面开发和数据处理等场景。对比两个对象是否相等时,== 运算符比较的是对象的引用,而重写 equals() 方法或使用第三方库可以根据对象的属性值来进行比较。


http://www.niftyadmin.cn/n/5868360.html

相关文章

中国旅游行业年度报告2024

过去的一年对中国旅游业是意义非凡的一年、是中国旅游行业复苏的关键一年,中国旅游市场多项关键指标同比大幅增长,接近或超越2019年同期水平,中国旅游行业在复苏与繁荣的征程中又向前迈进了一大步。2024年中国国内旅游人次56.15亿&#xff0c…

IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题

文章目录 引言一、安装Proxy AI1.1 在线安装Proxy AI1.2 离线安装Proxy AI 二、Proxy AI中配置DeepSeek2.1 配置本地部署的DeepSeek(Ollama方式)2.2 通过第三方服务商提供的API进行配置 三、效果测试 引言 许多开发者尝试通过安装Proxy AI等插件将AI能力…

在vscode中编译运行c语言文件,配置并运行OpenMP多线程并行程序设计

1.下载安装vscode Visual Studio Code - Code Editing. Redefined 2.安装vscode扩展 打开vscode,按ctrl+shift+x,打开扩展,搜索c/c++,下载相应的扩展 3.下载MinGW-w64 MinGW-w64 提供了 GNU 编译器集合,可以编译c/c++文件 这里下载见我的资源,可直接下载 把压缩包解压…

python学智能算法(五)|差分进化算法:原理认识和极小值分析

【1】引言 前序已经学习了模拟退火算法和遗传算法,相关文章链接为: python学智能算法(一)|模拟退火算法:原理解释和最小值求解_模拟退火算法python-CSDN博客 python学智能算法(二)|模拟退火算…

Go语言中的信号量:原理与实践指南

Go语言中的信号量:原理与实践指南 引言 在并发编程中,控制对共享资源的访问是一个经典问题。Go语言提供了丰富的并发原语(如sync.Mutex),但当我们需要灵活限制并发数量时,信号量(Semaphore&am…

android aosp系统定制如何监控系统性能

监控 Android 系统性能是优化系统、排查问题和提升用户体验的关键步骤。以下是一个详细的方案,涵盖从工具使用到自定义监控的实现方法。 1. 使用 Android 自带工具 1.1 adb 工具 adb 是 Android Debug Bridge 的缩写,是监控系统性能的基础工具。 1.1…

20.面试算法-树的深度优先遍历(二)

1. 对称和反转专题 在上一篇文章中的三个问题都需要先知道左右子树的情况才能处理自己当前的结果,这本质都是后序遍历,那前序什么时候会用呢?本小节就好几个。 LeetCode100:给你两棵二叉树的根节点 p 和 q,编写一个函…

IDEA使用git不提示账号密码登录,而是输入token问题解决

问题: IDEA使用git不提示账号密码登录,而是输入token问题解决 解决方案: 如下路径File->Setting->Plugins->gitlab 找到gitlab,取消勾选 再次操作git后输出账号密码即可 原因: IDEA等全家桶软件 使用git 推送…