科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件针对 Java 开发人员的 C# 编程语言

针对 Java 开发人员的 C# 编程语言

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

讨论 Java 和 C# 之间的异同点,目的在于当迁移到 .NET 时,让 Java 开发人员掌握所涉及的一些知识

来源: Microsoft.com 2007年10月29日

关键字: C# java Linux

  • 评论
  • 分享微博
  • 分享邮件

语言语法

在这一部分中,我们讨论这两种语言之间的相似点和不同点。一些主要的不同点有:

  • 常量声明 — Java 为此而使用 final 关键字,而 C# 使用关键字 const 或 readonly。

  • 复合数据类型 — 在 Java 中,我们可以使用类关键字来创建作为没有方法的类的复合数据类型,但是 C# 为此提供了 struct,同 C 中一样。

  • 析构函数 — C# 允许我们创建在销毁类的实例之前调用的析构函数方法。在 Java 中,可以提供 finalize() 方法来包含在将对象作为垃圾回收之前清除资源的代码。在 C# 中,由类析构函数来提供此功能。析构函数类似一个没有参数并前面带有波形符“~”的构造函数。

  • 函数指针 — C# 提供一个称为 delegate 的构造来创建类型安全的函数指针。Java 没有任何与之对等的机制。

数据类型

C# 提供了在 Java 中可用的所有数据类型,并且增加了对无符号数和新的 128 位高精度浮点类型的支持。

在 Java 中,对于每个基本数据类型,核心类库都提供了一个包装类来将其表示为 Java 对象。例如,Integer 类包装 int 数据类型,而 Double 类包装 double 数据类型。

而在 C# 中,所有的基本数据类型都是 System 命名空间中的对象。对于每个数据类型,都提供一个简称或别名。例如,int 是 System.Int32 的简称,而 double 是 System.Double 的简写形式。

下面的列表给出了 C# 数据类型及其别名。可以看到,前 8 个对应于 Java 中可用的基本类型。不过,请注意,Java 的 boolean 在 C# 中称为 bool。

C# 数据类型

简称

.NET类

类型

宽度

范围(位)

byte

System.Byte

无符号整数

8

-128 到 127

sbyte

System.SByte

有符号整数

8

-128 到 127

int

System.Int32

有符号整数

32

-2,147,483,648 到 2,147,483,647

uint

System.UInt32

无符号整数

32

0 到 4294967295

short

System.Int16

有符号整数

16

-32,768 到 32,767

ushort

System.UInt16

无符号整数

16

0 到 65535

long

System.Int64

有符号整数

64

-922337203685477508 到 922337203685477507

ulong

System.UInt64

无符号整数

64

0 到 18446744073709551615

float

System.Single

单精度浮点类型

32

-3.402823e38 到 3.402823e38

double

System.Double

双精度浮点类型

64

-1.79769313486232e308 到 1.79769313486232e308

char

System.Char

单个 Unicode 字符

16

用在文本中的 Unicode 符号

bool

System.Boolean

逻辑 Boolean 类型

8

true 或 false

object

System.Object

所有其他类型的基本类型

 

 

string

System.String

字符序列

 

 

decimal

System.Decimal

可以表示具有 29 个有效位的小数的精确分数或整数类型

128

-2 x 10-96 到 2 x 1096

因为 C# 将所有的基本数据类型都表示为对象,所以按照基本数据类型来调用对象方法是可能的。例如:
int i=10;
Console.WriteLine(i.ToString());

借助于自动装箱拆箱,可以达到此目的。更多信息请参见装箱和拆箱

枚举

与 C/C++ 相似,在 C# 中可以使用枚举来组合已命名常量,而在 Java 中不能使用枚举。下面的示例定义了一个简单的 Color 枚举。

public enum Color {Green, Orange, Red, Blue}  

还可以为枚举赋整数值,如下面的枚举声明所示:

public enum Color {Green=10, Orange=20, Red=30, Blue=40}

下面的程序调用 Enum 类型的 GetNames 方法来显示枚举的可用常量。然后,它将值赋给枚举,并显示该值。

using System;

public class TypeTest
{
    public static void Main()
    {
      Console.WriteLine("Possible color choices: ");
      //Enum.GetNames returns a string array of named constants for the enum
      foreach(string s in Enum.GetNames(typeof(Color)))
      {
        Console.WriteLine(s);
      }
      Color FavoriteColor = Color.Blue;
      Console.WriteLine("Favorite Color is {0}",FavoriteColor);
      Console.WriteLine("Favorite Color value is {0}", (int)FavoriteColor);
    }
}

在运行之后,该程序将显示如下结果:

Possible color choices:
Green
Orange
Red
Blue
Favorite Color is Blue
Favorite Color value is 40

字符串

在 Java 和 C# 中,字符串类型表现出相似的行为,只有一些细微的差别。二者的字符串类型均是不可改变的,这意味着一旦字符串创建完毕,就不能改变字符串的值。在二者的实例中,看起来像修改字符串实际内容的方法实际上创建一个新的字符串供返回,而保留原始的字符串不变。在 C# 和 Java 中,比较字符串值的过程是不同的。在 Java 中,为了比较字符串的值,开发人员需要按照字符串类型调用 equals() 方法,正如在默认情况下 == 运算符比较引用类型一样。在 C# 中,开发人员可以使用 == 或 != 运算符来直接比较字符串的值。在 C# 中,尽管字符串是引用类型,但是在默认情况下,== 和 != 运算符将比较字符串的值而不是引用。在本文后面,我们将讨论值类型和引用。

正如在 Java 中一样,C# 开发人员不应该使用字符串类型来连接字符串,以避免每次连接字符串时都创建新的字符串类的开销。相反,开发人员可以使用 System.Text 命名空间中的 StringBuilder 类,它在功能上等同于 Java 中的 StringBuffer 类。

字符串

C# 提供了避免在字符串常量中使用转义序列(如代表制表符的“\t”或代表反斜杠字符的“\”)的功能。要这样做,可以在为字符串赋值之前使用 @ 符号来声明字符串。下面的示例显示了如何使用转义字符以及如何为字符串赋值:

//Using escaped characters
string path = "\\\\FileShare\\Directory\\file.txt";

//Using String Literals
string escapedPath = @"\\FileShare\Directory\file.txt";
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章