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

Byte

Inteiro sem sinal

8

0 a 255

sbyte

SByte

inteiro com sinal com sinal

8

-128 a 127

int

Int32

inteiro com sinal com sinal

32

-2,147,483,648 to 2,147,483,647

uint

UInt32

Inteiro sem sinal

32

0 a 4294967295

short

Int16

inteiro com sinal com sinal

16

-32.768 a 32.767

ushort

UInt16

Inteiro sem sinal

16

0 a 65535

long

Int64

inteiro com sinal com sinal

64

-922337203685477508 to 922337203685477507

ulong

UInt64

Inteiro sem sinal

64

0 a 18446744073709551615

float

Single

Tipo de ponto flutuante de precisão simples

32

-3.402823e38 para 3.402823e38

double

Double

Tipo de ponto flutuante de precisão dupla

64

-1.79769313486232e308 para 1.79769313486232e308

char

Char

Um único caractere Unicode

16

Unicode símbolos usados no texto

bool

Boolean

Tipo booliano lógico

8

True ou false

object

Object

tipo de base de todos os outros tipos

string

String

Uma sequência de caracteres

decimal

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

Guia de Programação C#

Referência

Tipos (guia de programação translation from VPE for Csharp)

Outros recursos

Visual C#

Translation from VPE for Csharp linguagem de programação para desenvolvedores Java