Java compareTo理解

161 阅读2分钟

别担心!compareTo 确实需要一些时间来理解,但它其实很简单。让我用通俗易懂的方式解释:

🎯 compareTo 方法的核心作用

简单说:compareTo 就是比较两个数字/对象的大小关系

// 基本语法:
int result = a.compareTo(b);

// 返回值含义:
// -1: a < b  (a 小于 b)
//  0: a == b (a 等于 b)  
//  1: a > b  (a 大于 b)

📊 你的代码解析

Double compareToAdjustedPrice = SupplierDiscountRateUtil.calculateAdjustedPrice(
    detail.getPrice(), 
    SupplierDiscountRateUtil.getSupplierLevel(detail)
);

// 解释:如果"比较用的调整价格" < "当前调整价格"
if (compareToAdjustedPrice.compareTo(currentAdjustedPrice) < 0) {
    return true;
}

🔍 等价于数学比较:

// 这行代码:
if (compareToAdjustedPrice.compareTo(currentAdjustedPrice) < 0)

// 完全等价于:
if (compareToAdjustedPrice < currentAdjustedPrice)

🎓 为什么用 compareTo 而不是直接 < ?

比较方式适用场景优点缺点
a < b基本数据类型(int, double等)简单直接只能用于基本类型
a.compareTo(b) < 0对象类型(Double, Integer等)适用于所有Comparable对象稍微复杂

📝 更多示例帮你理解

// 示例1:整数比较
Integer a = 10;
Integer b = 20;
int result = a.compareTo(b); // result = -1 (因为10 < 20)

// 示例2:字符串比较
String s1 = "apple";
String s2 = "banana"; 
int result = s1.compareTo(s2); // result = -1 (按字母顺序)

// 示例3:你的业务场景
Double priceA = 100.0;  // 供应商A的调整后价格
Double priceB = 150.0;  // 供应商B的调整后价格

if (priceA.compareTo(priceB) < 0) {
    System.out.println("供应商A的价格更便宜!");
} else if (priceA.compareTo(priceB) > 0) {
    System.out.println("供应商B的价格更便宜!");
} else {
    System.out.println("两个供应商价格相同");
}

🛠️ 你的代码业务逻辑

从你的代码看,这是在比较不同供应商的折扣价格

// 计算某个供应商的调整后价格
Double supplierPrice = 计算逻辑(原始价格, 供应商等级);

// 如果这个价格比当前最低价格还要低
if (supplierPrice.compareTo(currentMinPrice) < 0) {
    return true; // 说明找到了更便宜的供应商
}

💡 记忆技巧

compareTo 想象成比较裁判

  • 返回 -1:左边选手输了(更小)
  • 返回 0:平局(相等)
  • 返回 1:左边选手赢了(更大)

🎯 实战练习

试着回答:

Double x = 25.5;
Double y = 30.0;

// 下面这些表达式的结果是什么?
x.compareTo(y) _______
y.compareTo(x) _______
x.compareTo(25.5) _______

答案:

  • x.compareTo(y)-1 (因为25.5 < 30.0)
  • y.compareTo(x)1 (因为30.0 > 25.5)
  • x.compareTo(25.5)0 (因为25.5 == 25.5)

现在是不是感觉 compareTo 没那么难了?😊