Tipos

Na empresa onde eu trabalho a gente trabalha com python .net e java, mas
a grande gama de projetos é em java…“graças a deus…!!!”, me colocaram
pra fazer um pequeno projeto em c# e estou gostando muito da linguagem
apezar de ficar devendo muito em relação ao java, e uma coisa que eu vi e
que tipos primitivos em c# tem métodos equals toString entre outros, achei muito estranho uma vez que esses métodos em java estão na classe Object
a qual todo objeto que a gente cria herdam implicitamente, mas alguém tem uma explicação porque em c# tipos primitivos tem esses métodos…?? será que tudo em c# é objeto…??

É isso mesmo que você imaginou. Em C#, assim como em VB.NET, tudo é objeto.

Na prática observamos que os tipos numéricos tem um comportamento diferenciado, pois mesmo sem serem instanciados já possuem valor 0 (assim como os primitivos!), mas não sei qual é a explicação para isso.

Eu acho isso uma inventação de moda
com certeza isso deve gastar mais memória
não vejo vantagem nisso… até que alguém me prove
o contrário.

[quote=Puppets]Eu acho isso uma inventação de moda
com certeza isso deve gastar mais memória
não vejo vantagem nisso… até que alguém me prove
o contrário.[/quote]

veja, a memória é usada para guardar as instruções da definição de classe, agora cada instancia da classe usa somente memoria para armazenar suas variáveis, o resto é compartilhado.

E Java também tem tipos primitivos encapsulados em classes.

Dê uma olhada em autoboxing.

:slight_smile:

[quote=Puppets ] não vejo vantagem nisso… até que alguém me prove
o contrário.[/quote]

A vantagem é que fica mais coerente e facil de ver.

exemplo.

em Java:

String hexa = Integer.toHexString( 15 );

em alguma linguagem onde o int é objeto:

hexa = 15.toHexString();

Fica bem mais coerente e orientado a objetos.

[quote=Puppets]Eu acho isso uma inventação de moda
com certeza isso deve gastar mais memória
não vejo vantagem nisso… até que alguém me prove
o contrário.[/quote]

Não é moda; na verdade era para o Java ser assim desde o começo (os tipos primitivos serem tratados como objetos em algumas circunstâncias), mas por motivos de prazo (e recursos) isso não foi implementado desde o começo.

(Se o James Gosling e o resto da equipe de Java tivesse tido tempo e recursos desde o começo, ele já nasceria com Generics - mas não o Generics tão complicado que existe no Java 5.0 - e autoboxing.)

A parte de “autoboxing” (que é o que o .NET faz desde o começo, e o Java faz desde a versão 5) é que faz essa correspondência entre primitivos e objetos.