1
resposta

new int() é diferente de new contaDaGabriela ??

Ola...

Escutando a explicaçao de que o "new" cria dois objetos distintos (mesmo que os objs sejam identicos, a igualdade entre eles é false), gostaria de entender por que no codigo abaixo, a igualdade da true ?

        int a = new int();
        int b = new int();
        a = 5;
        b = 5;
        Console.WriteLine(a == b);

Obrigado

David

1 resposta

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