Tipos de dados (C# vs. Java)
Este tópico discute algumas das principais semelhanças e diferenças em como dados são representados, alocados e coleta de lixo em Java e translation from VPE for Csharp.
Tipos de dados compostos
O conceito de uma classe sistema autônomo um tipo de dados compostos com campos, métodos e eventos é semelhante em Java e translation from VPE for Csharp.(Herança de classe é discutida separadamente no tópico intitulado Herança e classes derivado (versus translation from VPE for Csharp Java).) Translation from VPE for Csharp apresenta o conceito de uma estrutura sistema autônomo um tipo de dados compostos pilha alocada que não oferece suporte a herança.Em maioria dos aspectos, structs são muito semelhantes às classes.As estruturas fornecem uma maneira simples de agrupar campos relacionados e métodos para uso em loops apertados e outros cenários em que o desempenho é crítico.
Translation from VPE for Csharp permite que você crie um método de destruidor é chamado antes que instâncias de uma classe de coleta de lixo.Em Java, um finalize método pode ser usado para conter código que limpa os recursos antes que o objeto seja coletado ao lixo. Em translation from VPE for Csharp, essa função é efetuada, o destruidor de classe.O destruidor é semelhante a um construtor sem argumentos e um caractere de til (~) anterior.
Tipos de dados internas
Translation from VPE for Csharp fornece todos os tipos de dados que estão disponível em Java e adiciona suporte para numerais sem assinatura e um novo tipo de ponto flutuante 128 bit alta precisão.
Para cada tipo de dados primitivos em Java, a biblioteca de classes de núcleo fornece uma classe de invólucro que o representa sistema autônomo um objeto Java.Por exemplo, a Int32 disposição de classe a int tipo de dados e o Double disposição de classe a duplo tipo de dados.
Por Outros lado, todos os tipos de dados primitivo na translation from VPE for Csharp são objetos no System espaço para nome. Para cada tipo de dados, um nome curto, ou alias, é fornecida.Por exemplo, int é o nome curto para System.Int32 e double é a forma abreviada de System.Double.
A lista de tipos de dados translation from VPE for Csharp e seus aliases é fornecida na tabela a seguir.sistema autônomo você pode ver, o oito primeiro esses correspondem aos tipos primitivos disponível em Java.Observe, entretanto, boolean é chamado bool em translation from VPE for Csharp.
Nome abreviado |
Classe do .NET |
Type (Tipo) |
Width |
Intervalo (bits) |
---|---|---|---|---|
byte |
Inteiro sem sinal |
8 |
0 a 255 |
|
sbyte |
inteiro com sinal com sinal |
8 |
-128 a 127 |
|
int |
inteiro com sinal com sinal |
32 |
-2,147,483,648 to 2,147,483,647 |
|
uint |
Inteiro sem sinal |
32 |
0 a 4294967295 |
|
short |
inteiro com sinal com sinal |
16 |
-32.768 a 32.767 |
|
ushort |
Inteiro sem sinal |
16 |
0 a 65535 |
|
long |
inteiro com sinal com sinal |
64 |
-922337203685477508 to 922337203685477507 |
|
ulong |
Inteiro sem sinal |
64 |
0 a 18446744073709551615 |
|
float |
Tipo de ponto flutuante de precisão simples |
32 |
-3.402823e38 para 3.402823e38 |
|
double |
Tipo de ponto flutuante de precisão dupla |
64 |
-1.79769313486232e308 para 1.79769313486232e308 |
|
char |
Um único caractere Unicode |
16 |
Unicode símbolos usados no texto |
|
bool |
Tipo booliano lógico |
8 |
True ou false |
|
object |
tipo de base de todos os outros tipos |
|||
string |
Uma sequência de caracteres |
|||
decimal |
Preciso tipo fracionário ou integral que pode representar números Decimal com 29 dígitos significativos |
128 |
±1.0 × 10e−28 para ±7.9 × 10e28 |
sistema autônomo translation from VPE for Csharp representa todos sistema autônomo tipos de dados primitivos sistema autônomo objetos, é possível chamar um método de objeto em um tipo de dados primitivos.Por exemplo:
static void Main()
{
int i = 10;
object o = i;
System.Console.WriteLine(o.ToString());
}
Isso é obtido com a ajuda automático conversão boxing e conversão conversão unboxing.Para obter mais informações, consulte conversão boxing e conversão conversão unboxing (guia de programação translation from VPE for Csharp).
Constantes
Java e translation from VPE for Csharp fornecem a capacidade de declarar uma variável cujo valor é especificada no momento da compilar e não pode ser alterada em time de execução.Java usa o final modificador de campo como uma variável, enquanto usa translation from VPE for Csharp declarar o Const palavra-chave.Em adição a const, C# fornece o somente leitura palavra-chave para declarar variáveis que podem ser atribuídas a um valor de uma vez no tempo de execução--tanto na demonstrativo de demonstrativo senão no construtor.Após a inicialização, o valor de um readonly não é possível alterar a variável. Um cenário no qual readonly sistema autônomo variáveis são úteis é quando módulos que foram compilados separadamente precisam compartilhar dados, sistema autônomo um número de versão. Se módulo é atualizado e recompilado com um novo número de versão, módulo B pode ser inicializado com esse novo valor de constante sem ter que ser recompilados.
Enumerações
Enumerações ou enums, são usados para agrupar constantes nomeadas semelhantes a como eles são usados em C e C++; eles não estão disponível em Java.O exemplo a seguir define um simples Color enumeração.
public enum Color
{
Green, //defaults to 0
Orange, //defaults to 1
Red, //defaults to 2
Blue //defaults to 3
}
Integral de valores também poderem ser sistema autônomo assinados para enumerações sistema autônomo mostrado na seguinte declaração de enum:
public enum Color2
{
Green = 10,
Orange = 20,
Red = 30,
Blue = 40
}
O exemplo de código a seguir chama o GetNames método para o Enum Digite para exibir as constantes disponível para uma enumeração. Em seguida, atribui um valor para uma enumeração e exibe o valor.
class TestEnums
{
static void Main()
{
System.Console.WriteLine("Possible color choices: ");
//Enum.GetNames returns a string array of named constants for the enum.
foreach(string s in System.Enum.GetNames(typeof(Color)))
{
System.Console.WriteLine(s);
}
Color favorite = Color.Blue;
System.Console.WriteLine("Favorite Color is {0}", favorite);
System.Console.WriteLine("Favorite Color value is {0}", (int) favorite);
}
}
Saída
Possible color choices:
Green
Orange
Red
Blue
Favorite Color is Blue
Favorite Color value is 3
Sequências
Tipos de seqüência de caracteres no Java e translation from VPE for Csharp exibam comportamento semelhante com pequenas diferenças.Os dois tipos de seqüência de caracteres são imutáveis, que significa que os valores de cadeias de caracteres não podem ser alterados depois que criar as seqüências de caracteres.Nos dois casos, o métodos que aparecem para modificar o conteúdo real de uma seqüência de caracteres, na verdade, criam uma nova seqüência de caracteres para retornar, deixando a seqüência de caracteres original inalterada.O processo de comparação de valores de seqüência de caracteres é diferente no translation from VPE for Csharp e Java.Para comparar valores de seqüência de caracteres em Java, sistema autônomo desenvolvedores precisam chamar o equals método em um tipo de seqüência de caracteres sistema autônomo o == operador compara sistema autônomo tipos de referência por padrão. Em translation from VPE for Csharp, os desenvolvedores podem usar o == ou != operadores para comparar valores de seqüência de caracteres diretamente. Embora uma seqüência de caracteres é um tipo de referência em translation from VPE for Csharp, o == e != operador irá, por padrão, comparar os valores da seqüência de caracteres em vez disso, em seguida, faz referência.
Assim como em Java, translation from VPE for Csharp desenvolvedores não use o tipo string para concatenação de seqüências de caracteres para evitar a sobrecarga da criação de novas classes de seqüência de caracteres cada time é concatenada a seqüência de caracteres.Em vez disso, os desenvolvedores podem usar o StringBuilder classe, que é funcionalmente equivalente para Java StringBuffer classe.
Literais de seqüência de caracteres
Translation from VPE for Csharp fornece a capacidade de evitar o uso de seqüências de escape como "\t" para a guia ou "\" para caracteres de barra invertida em constantes de seqüência de caracteres.Para fazer isso, basta declarar a seqüência textual usando o símbolo @ para preceder a atribuição do valor de seqüência de caracteres.Os exemplos a seguir mostram como usar caracteres de escape e como atribuir literais da cadeia de caracteres:
static void Main()
{
//Using escaped characters:
string path1 = "\\\\FileShare\\Directory\\file.txt";
System.Console.WriteLine(path1);
//Using String Literals:
string path2 = @"\\FileShare\Directory\file.txt";
System.Console.WriteLine(path2);
}
A conversão e transmissão
Java e translation from VPE for Csharp seguem regras semelhantes para a conversão automático e transmissão de tipos de dados.
Como Java, translation from VPE for Csharp oferece suporte a ambas as conversões de tipo implícita e explícita.No caso de alargamento conversões, as conversões são implícitas.Por exemplo, a seguinte conversão de int para long está implícito, sistema autônomo em Java:
int int1 = 5;
long long1 = int1; //implicit conversion
A seguir está uma lista de conversões implícitas entre tipos de dados do .NET estrutura:
Tipo de fonte |
Tipo de destino |
---|---|
Byte |
curto, ushort, int, uint, long, ulong, float, double ou decimal |
Sbyte |
curto, int, longo, float, double ou decimal |
int |
longo, float, double ou decimal |
Uint |
longo, ulong, float, double ou decimal |
Short |
int, longo, float, double ou decimal |
Ushort |
int, uint, longo, ulong, float, double ou decimal |
Long |
float, double ou decimal |
ULong |
float, double ou decimal |
Float |
double |
Char |
ushort, int, uint, longo, ulong, float, double ou decimal |
Você csistema autônomot expressões que você deseja converter explicitamente usando a mesma sintaxe sistema autônomo Java:
long long2 = 5483;
int int2 = (int)long2; //explicit conversion
A tabela a seguir lista as conversões explícitas.
Tipo de fonte |
Tipo de destino |
---|---|
Byte |
SByte ou char |
Sbyte |
byte, ushort, uint, ulong ou char |
int |
SByte, byte, short, ushort, uint, ulong ou char |
Uint |
SByte, byte, short, ushort, int ou char |
Short |
SByte, byte, ushort, uint, ulong ou char |
Ushort |
SByte, byte, abreviada ou char |
Long |
SByte, byte, short, ushort, int, uint, ulong ou char |
ULong |
SByte, byte, curto, ushort, int, uint, long, ou char |
Float |
SByte, byte, short, ushort, int, uint, longo, ulong, char, ordecimal |
Double |
SByte, byte, short, ushort, int, uint, longo, ulong, char, float ou decimal |
Char |
SByte, byte ou curto |
Decimal |
SByte, byte, short, ushort, int, uint, ulong, longo, char, float ou duas vezes |
Tipos de referência e valor
Translation from VPE for Csharp suporta dois tipos de tipos de variáveis:
Tipos de valor
Estes são tipos de primitivos de dados internos, sistema autônomo char, int e float, bem sistema autônomo tipos definidos pelo usuário declarados com struct.
Tipos de referência
Classes e outros tipos de dados complexos são construídos a partir de tipos primitivos.Variáveis de tais tipos não contêm uma instância de tipo, mas apenas uma referência a uma instância.
Se você criar duas variáveis de tipo de valor, i e j, sistema autônomo segue, e em seguida, i e j são completamente independentes entre si:
int i = 10;
int j = 20;
Eles recebem locais de memória separado:
Se você alterar o valor de uma dessas variáveis, o Outros naturalmente não será afetado.Para instância, se você tiver uma expressão sistema autônomo a seguir, ainda há nenhuma conexão entre sistema autônomo variáveis:
int k = i;
Ou seja, se você alterar o valor de i, k permanecerá com o valor que i tinha no momento da atribuição.
i = 30;
System.Console.WriteLine(i.ToString()); // 30
System.Console.WriteLine(k.ToString()); // 10
No entanto, tipos de referência, funcionam de modo diferente.Por exemplo, você poderia declarar duas variáveis da seguinte maneira:
Employee ee1 = new Employee();
Employee ee2 = ee1;
Agora, sistema autônomo classes são tipos de referência no translation from VPE for Csharp, ee1 é conhecido sistema autônomo uma referência para Employee. A primeira das duas linhas anteriores cria uma instância de Employee na memória e conjuntos ee1 Para fazer referência a ela. Portanto, ao conjunto ee2 a se igualar ee1, ele contém uma duplicata da referência à classe na memória. Se você alterar sistema autônomo propriedades em agoraee2, sistema autônomo propriedades ee1 refletir essas alterações, porque ambos aponta para o mesmo objeto na memória, conforme mostrado a seguir:
conversão boxing e conversão conversão unboxing
O processo de conversão de um tipo de valor para um tipo de referência é chamado conversão boxing.O processo inverso, conversão de um tipo de referência para um tipo de valor, é chamado de conversão conversão unboxing.Isso é ilustrado no código a seguir:
int i = 123; // a value type
object o = i; // boxing
int j = (int)o; // unboxing
Java requer que você executar essas conversões manualmente.Tipos primitivos de dados podem ser convertidos em objetos de classes de wrapper por construir objetos ou conversão boxing.Da mesma forma, os valores de tipos primitivos de dados podem ser extraídos dos objetos de classes de invólucro chamando um método apropriado em objetos ou conversão conversão unboxing.Para obter mais informações sobre conversão boxing e conversão conversão unboxing, consulte conversão boxing e conversão conversão unboxing (guia de programação translation from VPE for Csharp).
Consulte também
Conceitos
Referência
Tipos (guia de programação translation from VPE for Csharp)
Outros recursos
Translation from VPE for Csharp linguagem de programação para desenvolvedores Java