CompareTo() tells you which, and if, one is greater/less than the other, while Equals() simply tells you if they are equivalent values.
If all you want to know is "are they the same values", you use Equals(). If you need to also know how they compare, use CompareTo()
int a = 50;
int b = 10;
//if you need to know if they are equal:
if(a.Equals(b)){
//won't execute
}
//this would check if they are equal, as well
if(a.CompareTo(b) == 0){
//won't execute
}
//if you need to know if a is bigger than b, specifically:
if(a.CompareTo(b) > 0){
//will execute
}
//this would check to see if a is less than b
if(a.CompareTo(b) < 0){
//won't execute
}
Finally, note that these Equals() and CompareTo() methods are not strictly needed for primitive types like int, because the standard comparison operators are overloaded, so you could do these:
//this would check if they are equal, as well
if(a == b){
//won't execute
}
//if you need to know if a is bigger than b, specifically:
if(a > b){
//will execute
}
//this would check to see if a is less than b
if(a < b){
//won't execute
}
Finally, you mentioned string in your question. Equals() and CompareTo() work as I have describe for string as well. Just keep in mind the 'comparison' that CompareTo() does on strings is based on alphabetical sorting, so "abcdefg" < "z"