Java比较运算案例如何使用

wen java案例 28

本文目录导读:

Java比较运算案例如何使用

  1. 基本比较运算符
  2. 字符串比较
  3. 对象比较
  4. 使用 Comparator 进行自定义排序
  5. 实际应用案例
  6. 数组和集合比较
  7. 常见陷阱和注意事项

我来详细介绍Java比较运算的使用案例。

基本比较运算符

public class ComparisonOperators {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        // 基本比较操作
        System.out.println("a == b: " + (a == b));  // false
        System.out.println("a != b: " + (a != b));  // true
        System.out.println("a > b: " + (a > b));    // false
        System.out.println("a < b: " + (a < b));    // true
        System.out.println("a >= b: " + (a >= b));  // false
        System.out.println("a <= b: " + (a <= b));  // true
    }
}

字符串比较

public class StringComparison {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = new String("Hello");
        // 使用 == 比较引用
        System.out.println("str1 == str2: " + (str1 == str2));  // true (字符串常量池)
        System.out.println("str1 == str3: " + (str1 == str3));  // false (不同对象)
        // 使用 equals() 比较内容
        System.out.println("str1.equals(str2): " + str1.equals(str2));  // true
        System.out.println("str1.equals(str3): " + str1.equals(str3));  // true
        // 忽略大小写比较
        System.out.println("Hello equalsIgnoreCase hello: " + 
                          "Hello".equalsIgnoreCase("hello"));  // true
    }
}

对象比较

class Person implements Comparable<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 person = (Person) obj;
        return age == person.age && name.equals(person.name);
    }
    // 实现 Comparable 接口
    @Override
    public int compareTo(Person other) {
        return this.age - other.age;  // 按年龄比较
    }
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}
public class ObjectComparison {
    public static void main(String[] args) {
        Person p1 = new Person("Alice", 25);
        Person p2 = new Person("Bob", 30);
        Person p3 = new Person("Alice", 25);
        // 对象引用比较
        System.out.println("p1 == p2: " + (p1 == p2));  // false
        System.out.println("p1 == p3: " + (p1 == p3));  // false (不同对象)
        // 内容比较
        System.out.println("p1.equals(p2): " + p1.equals(p2));  // false
        System.out.println("p1.equals(p3): " + p1.equals(p3));  // true
        // 使用 Comparable 接口比较
        System.out.println("p1.compareTo(p2): " + p1.compareTo(p2));  // -5 (25-30)
        System.out.println("p2.compareTo(p1): " + p2.compareTo(p1));  // 5 (30-25)
        System.out.println("p1.compareTo(p3): " + p1.compareTo(p3));  // 0 (25-25)
    }
}

使用 Comparator 进行自定义排序

import java.util.*;
class Student {
    String name;
    int score;
    Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
    @Override
    public String toString() {
        return name + ":" + score;
    }
}
public class ComparatorExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 85));
        students.add(new Student("Bob", 92));
        students.add(new Student("Charlie", 78));
        students.add(new Student("David", 85));
        // 按分数降序排序(相同分数按名字排序)
        Comparator<Student> comparator = Comparator
            .comparingInt((Student s) -> s.score)
            .reversed()
            .thenComparing(s -> s.name);
        students.sort(comparator);
        System.out.println("排序后:");
        students.forEach(System.out::println);
        // 输出: Bob:92, Alice:85, David:85, Charlie:78
    }
}

实际应用案例

public class PracticalComparison {
    // 成绩评级系统
    public static String gradeStudent(int score) {
        if (score >= 90) {
            return "优秀";
        } else if (score >= 80) {
            return "良好";
        } else if (score >= 70) {
            return "中等";
        } else if (score >= 60) {
            return "及格";
        } else {
            return "不及格";
        }
    }
    // 验证密码强度
    public static boolean isStrongPassword(String password) {
        return password.length() >= 8 && 
               password.matches(".*[A-Z].*") && 
               password.matches(".*[a-z].*") && 
               password.matches(".*\\d.*");
    }
    // 判断闰年
    public static boolean isLeapYear(int year) {
        return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
    }
    public static void main(String[] args) {
        // 成绩评级
        System.out.println("85分的评级: " + gradeStudent(85));  // 良好
        System.out.println("59分的评级: " + gradeStudent(59));  // 不及格
        // 密码验证
        String password = "Password123";
        System.out.println(password + " 密码强度: " + 
                          (isStrongPassword(password) ? "强" : "弱"));
        // 闰年判断
        int year = 2024;
        System.out.println(year + "是闰年吗? " + 
                          (isLeapYear(year) ? "是" : "否"));
        // 三元运算符案例
        int age = 18;
        String status = (age >= 18) ? "成年人" : "未成年人";
        System.out.println("年龄" + age + "岁: " + status);
    }
}

数组和集合比较

import java.util.Arrays;
public class ArrayComparison {
    public static void main(String[] args) {
        // 数组比较
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {1, 2, 3};
        int[] arr3 = arr1;
        System.out.println("arr1 == arr2: " + (arr1 == arr2));  // false (不同对象)
        System.out.println("arr1 == arr3: " + (arr1 == arr3));  // true (同一对象)
        // 使用 Arrays.equals 比较数组内容
        System.out.println("Arrays.equals(arr1, arr2): " + 
                          Arrays.equals(arr1, arr2));  // true
        // 多维数组比较
        int[][] matrix1 = {{1, 2}, {3, 4}};
        int[][] matrix2 = {{1, 2}, {3, 4}};
        System.out.println("Arrays.deepEquals: " + 
                          Arrays.deepEquals(matrix1, matrix2));  // true
    }
}

常见陷阱和注意事项

public class ComparisonPitfalls {
    public static void main(String[] args) {
        // 陷阱1: 浮点数比较
        double d1 = 0.1 + 0.2;
        double d2 = 0.3;
        System.out.println("0.1 + 0.2 == 0.3: " + (d1 == d2));  // false
        // 正确方式
        double epsilon = 0.0001;
        System.out.println("Math.abs(d1 - d2) < epsilon: " + 
                          (Math.abs(d1 - d2) < epsilon));  // true
        // 陷阱2: Integer 缓存
        Integer n1 = 127;
        Integer n2 = 127;
        System.out.println("n1 == n2 (127): " + (n1 == n2));  // true (缓存)
        Integer n3 = 128;
        Integer n4 = 128;
        System.out.println("n3 == n4 (128): " + (n3 == n4));  // false (超出缓存)
        // 正确方式:使用 equals()
        System.out.println("n3.equals(n4): " + n3.equals(n4));  // true
    }
}
  1. 基本类型:使用 、、><>=<=
  2. 字符串比较比较用 equals(),忽略大小写用 equalsIgnoreCase()
  3. 对象比较:重写 equals() 方法,实现 Comparable 或使用 Comparator
  4. 浮点数比较:使用误差范围,不要直接用
  5. 包装类型:使用 equals() 而不是

这些比较运算在实际开发中非常常用,掌握它们能帮助你编写更健壮的代码。

抱歉,评论功能暂时关闭!