Bom dia, David!
O new
cria objetos distindo quando você trabalha com valores de referência, contaDaGabriela
é um desses valores, sendo assim quando você os compara por baixo dos panos o Equals
da classe Object
é chamado e caso você não o sobrescreva a comparação será feita através do endereço em memória no qual a variável está, por isso é chamado de valor de referência. Sendo assim, o retorno da comparação entre valores de referência sempre serão false
, a menos que você sobrescreva o Equals para fazer a comparação ao seu gosto. Já isso não acontece com o int por ser um tipo primitivo, eles são chamados de tipos de valores, onde quando você executa uma comparação o que é de fato comparado são os seus valores e não uma referência em memória.
Seguem uns links para ajudar a compreender melhor:
Tipos de referência - https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/reference-types
Tipos de valor - https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/builtin-types/value-types