JAVA基础(13)-toString,equal方法

本文介绍了在Java中如何重写Object类中的toString()和equals()方法。详细解释了这两个方法在默认情况下的行为,以及为何需要重写它们来更好地展示对象的状态。同时提供了重写的步骤和示例代码。

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

toString():


           在Object中,返回的是类全名@HashCode值, 即对象的内存堆中的位置信息  
          【类有类名和类全名之分:
                 类名:即最短的名称
                 类全名:从包名开始写的名称
                        如:  String 是类名,java.lang.String是类全名】
            此方法会在输出变量时,或引用变量进行拼接时默认调用。而查看地址信息,通常没有必要,我们通常要查看的是
  对象的成员变量信息因此我们都需要重写toString()方法,用于查看对象的详情
  格式:
   "[成员变量1="+成员变量1+",成员变量2="+成员变量2+"]"

equals(Object obj)


     Object类型中的此方法中的逻辑是比较调用者this与形参obj的地址信息是否相等。
     简单说成:比较this与obj是不是同一个对象,内容是不是相同,所以在定义类型时,继承过来的equals方法 我们要重写。
  重写规则:
   (1)   查看传进来的obj是不是null
             if(obj==null){
                  return false;
             }
   (2)   查看传进来的obj是不是this.
         if(obj==this){
             return true;
         }
   (3)   查看穿进来的obj是不是本类型
            if(obj.getClass()!=this.getClass()){
                return false;
            }    
            可以改成
            if(!(obj instanceof Person)){
                return false;
            }
            
instanceof关键字:
     作用是判断引用变量指向的对象是否属于某一类型
     语法:
         boolean f =  变量名  instanceof  类型名

快捷键:shift+alt+s  ,可以选择添加已经写好的toString,和equal方法

### Java面向对象编程中常用的类 #### 1. **Object 类** `Object` 是所有 Java 类的祖先(根基类),每个类都隐式或显式地继承自 `Object` 类。这意味着所有的 Java 对象都可以调用 `Object` 中定义的方法,例如 `toString()`、`equals(Object obj)` `hashCode()` 等方法[^1]。 以下是 `Object` 类的一些常用方法- `public String toString()`: 返回该对象的字符串表示形式。 - `public boolean equals(Object obj)`: 判断当前对象是否等于指定的对象。 - `protected void finalize() throws Throwable`: 当垃圾回收器决定释放此对象所占用的空间时,会自动调用此方法- `public int hashCode()`: 返回该对象的哈希码值。 这些方法通常会被子类重写以适应特定的需求。 --- #### 2. **String 类** `String` 类用于处理不可变的字符序列。它是 Java 编程中最常使用的类之一。由于其不可变性,在多线程环境中非常安全[^2]。 一些常见的操作包括: - 字符串连接:通过 `+` 或者 `concat(String str)` 方法完成。 - 子串提取:使用 `substring(int beginIndex, int endIndex)` 方法- 大小写转换:利用 `toLowerCase()` `toUpperCase()` 方法。 示例代码如下: ```java String greeting = "Hello"; System.out.println(greeting.toUpperCase()); // 输出 HELLO ``` --- #### 3. **Integer 类其他包装类** `Integer` 是基本数据类型 `int` 的包装类。它提供了许多有用的静态方法来处理整数类型的数值运算转换[^3]。 其他类似的包装类还包括: - `Boolean` (对应布尔类型) - `Double`, `Float` (对应浮点类型) - `Character` (对应字符类型) 以下是一个简单的例子展示如何创建并比较两个 `Integer` 对象: ```java Integer a = new Integer(42); Integer b = Integer.valueOf("42"); if (a.equals(b)) { System.out.println("Values are equal."); } ``` --- #### 4. **ArrayList 类** `ArrayList` 属于集合框架的一部分,实现了动态数组的功能。它可以存储任意数量的对象,并允许随机访问其中的元素。 主要特点有: - 动态调整大小。 - 提供快速的随机访问能力。 - 不适合频繁插入删除场景下的性能优化需求。 实例化方式以及常见操作演示: ```java import java.util.ArrayList; ArrayList<String> list = new ArrayList<>(); list.add("Apple"); // 添加元素 list.remove(0); // 移除索引位置上的元素 for (String item : list) { System.out.println(item); } ``` --- #### 5. **HashMap 类** `HashMap` 实现了基于键值对的数据结构——散列表。它的特点是能够高效地执行查找、插入删除操作。 典型用途包括缓存机制的设计或者关联不同实体之间的映射关系。下面是一段简单程序片段用来初始化一个 HashMap 并对其进行查询: ```java import java.util.HashMap; HashMap<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); // 查询是否存在某个 key-value pair if (map.containsKey(1)) { System.out.println(map.get(1)); // 输出 One } ``` --- #### 6. **Date Calendar 类** 时间日期相关的处理经常需要用到 `Date` 及其改进版本 `Calendar` 来获取系统当前时间日期信息。 虽然现代项目更倾向于采用 JSR-310 定义的新 API (`LocalDateTime`) 替代旧有的 Date/Time 库,但在遗留代码里仍然广泛存在这两种传统实现方式。 样例代码如下所示: ```java import java.util.Date; import java.util.Calendar; Date today = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(today); System.out.println(cal.YEAR + "-" + cal.MONTH + "-" + cal.DAY_OF_MONTH); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值