<AI>
JavaFXの setCellFactory 内で古い値(old value)と新しい値(new value)を比較するには、
Cellの updateItem メソッドをオーバーライドして、引数の item (新しい値) と getItem() (古い値) を比較します。
以下は、ListView や TableColumn での具体的な実装例です。
実装例
java
listView.setCellFactory(param -> new ListCell() {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setText(null);
            setGraphic(null);
        } else {
            // getItem() で古い値(直前にこのセルに表示されていた値)を取得
            String oldValue = getItem();
            String newValue = item;

            // old と new の値を比較
            if (!java.util.Objects.equals(oldValue, newValue)) {
                // 値が変更された場合の処理(例: ログ出力、色付けフラグの変更など)
                System.out.println("値が変更されました: " + oldValue + " -> " + newValue);
            }

            setText(newValue);
        }
    }
});

ポイント
・ item: 現在の行(データ)にバインドされた最新の値が入ります。
・ getItem(): Cellクラスが標準で持っているメソッドで、そのセルに「現在表示されている(=更新前の)値」を取得できます。
・ Objects.equals() の利用: 値が null の場合でも NullPointerException を防ぎ、安全に同値判定ができるため推奨されます。

なお、JavaFXの ListView や TableView は、スクロールや再描画の際に頻繁に updateItem を呼び出します。
そのため、ここで重い処理を実行するとパフォーマンスが低下する点に注意してください。
純粋なデータ変更の監視であれば、セルファクトリ内ではなく、データのプロパティ(例: StringProperty)に対して 
addListener を使うのがより一般的なアプローチです。