Or Money.new(20, 'USD') == Money.new(125, 'CNY') when ExchangeRateManager.getExchangeRate('CNY', 'USD') == 0.16?
My point is that when performing these comparisons, it may be useful to use a more descriptive function like:
boolean currenciesHaveSameWorth(Money m1, Money m2)
And then a reader of the calling code might not have to look into the implementation to understand what the function is doing, whereas you definitely would when using == because == now means "whatever it's overridden to mean"