@Override
	public int compare(T t1, T t2) {
		if (t1 == t2) {
			return 0;
		}

		Object value1 = getColumnValue(t1);
		Object value2 = getColumnValue(t2);

		if (value1 == null || value2 == null) {
			return TableComparators.compareWithNullValues(value1, value2);
		}

		int result = columnComparator.compare(value1, value2);
		if (result != 0) {
			return result;
		}

		// 
		// At this point we have one of two cases:
		// 1) the column comparator is a non-default comparator that has returned 0, which means
		//    the column values should sort the same, or
		// 2) the column comparator is a default/non-specific comparator, which means that the 
		//    column values should sort the same, or *that the default comparator could not 
		//    figure out how to sort them.
		//
		// In case 1, this backup comparator will be just a stub comparator; in case 2, this 
		// backup comparator is not a stub and will do something reasonable for the sort, 
		// depending upon how the model created this class.
		//
		return backupRowComparator.compare(value1, value2);
	}
This version of the constructor is used for the default case where the client will 
supply a backup row comparator that will get called if the given column comparator returns
a '0' value.

@param model the table model using this comparator
@param sortColumn the column being sorted
@param comparator the column comparator to use for sorting
@param backupRowComparator the backup row comparator
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/sort/RowBasedColumnComparator.java