Question: Consider this code:

```
int age = 25;
short newAge = 25;
Console.WriteLine(age == newAge);  //true
Console.WriteLine(newAge.Equals(age)); //false
Console.ReadLine();

```

Both `int` and `short` are primitive types, but a comparison with `==` returns true and a comparison with `Equals` returns false.

Why?

Answer: 
When you pass `int` to `short`'s Equals you pass `object`: 

![enter image description here](https://i.stack.imgur.com/cNjoP.png)
So this pseudocode runs:

```
return obj is short && this == (short)obj;

```
`==` is used for checking a equal condition, it can be considered as an operator(boolean operator), just to compare 2 things and here the data type doesn't matter as there would be a type casting done and `Equals` is also used for checking equals condition, but in this case the data types should be same. N Equals is a method not an operator.

Below is a small example taken from the one you provided and this will clarify difference in brief,.

```
int x=1;
short y=1;
x==y;//true
y.Equals(x);//false

```

in the above example, X and Y have same values i.e. 1, and when we use `==`, it will return true, as in case of `==`, the short type is converted to int by the compiler and the result is given.

and when we use `Equals`, the comparing is done, but the type casting is not done by compiler, so false is returned.

Guys, please let me know if I'm wrong.