Java 中的对象比较:==equals

在 Java 中,比较对象时常用的两种方法是 ==equals。它们有不同的语义和用途,理解它们的区别对于编写正确的代码至关重要。

== 运算符

  • 用途:比较两个对象的引用是否相同,即它们是否指向同一个内存地址。
  • 基本数据类型:对于基本数据类型(如 intcharboolean 等),== 比较的是值是否相等。
  • 对象:对于对象(如 StringInteger 等),== 比较的是对象的引用是否相同。

equals 方法

  • 用途:比较两个对象的内容是否相等。
  • 重写:对于大多数对象类型,equals 方法需要被重写以提供有意义的内容比较。
  • 字符串:对于 String 类型,equals 方法比较的是字符串的内容是否相等。
import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    public boolean flag = false;
    public void dfs(TreeNode root, ArrayList<Integer> path, int o){
        if(flag || root == null)
            return;
        path.add(root.val);
        if(root.val == o){
            flag = true;
            return;
        }
        dfs(root.left, path, o);
        dfs(root.right, path, o);
        if(flag)
            return;
        path.remove(path.size() - 1);
    }
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // write code here
        ArrayList<Integer> p1 = new ArrayList<>();
        ArrayList<Integer> p2 = new ArrayList<>();
        dfs(root, p1, o1);
        flag = false;
        dfs(root, p2, o2);
        int res = 0;
        for(int i = 0; i < Math.min(p1.size(), p2.size()); i++){
            if(p1.get(i).equals(p2.get(i)))
                res = p1.get(i);
        }

        return res;
    }
}