int? is a nullable type. Docs
Nullable types extend their base types to allow null values. For example, int? i = null is allowed, even though int i = null is not.
x is null is pattern matching. Docs
Pattern matching checks whether value matches a condition, and at the same time transforms it into new value(s). For example, a is int i checks that a is int, and if true produces a new value i equal to a, but typed as int.