`
JadeLuo
  • 浏览: 425898 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

C# 与 Java语法对比

    博客分类:
  • C#
 
阅读更多

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_csref/html/bbf3a6da-7884-43ba-9e02-e4d727ab481a.htm

 

 

 

Java 不允许在同一个源文件中出现多个包。而 C# 允许在一个 .cs 文件中出现多个命名空间,如下所示:

   
namespace AcmeAccounting
{
    public class GetDetails
    {
        // ...
    }
}

namespace AcmeFinance
{
    public class ShowDetails
    {
        // ...
    }
}

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

核心类库为 Java 中的每个基元数据类型提供了一个包装类,此包装类将基元数据类型表示为 Java 对象。例如,Int32 类包装 int 数据类型,Double 类包装 double 数据类型。

另一方面,C# 中的所有基元数据类型都是 System 命名空间中的对象。对于每个数据类型,提供了一个简称(或别名)。例如,intSystem.Int32 的简称,而 doubleSystem.Double 的简写。

下表提供了 C# 数据类型列表及其别名。如表所示,前八个数据类型对应于 Java 中可用的基元类型。但请注意,Java 的 boolean 在 C# 中称为 bool

简称

.NET 类

类型

宽度

范围(位)

byte

Byte

无符号整数

8

0 到 255

sbyte

SByte

有符号整数

8

-128 到 127

int

Int32

有符号整数

32

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

uint

UInt32

无符号整数

32

0 到 4294967295

short

Int16

有符号整数

16

-32,768 到 32,767

ushort

UInt16

无符号整数

16

0 到 65535

long

Int64

有符号整数

64

-922337203685477508 到 922337203685477507

ulong

UInt64

无符号整数

64

0 到 18446744073709551615

float

Single

单精度浮点型

32

-3.402823e38 至 3.402823e38

double

Double

双精度浮点型

64

-1.79769313486232e308 至 1.79769313486232e308

char

Char

单 Unicode 字符

16

文本中使用的 Unicode 符号

bool

Boolean

逻辑布尔值类型

8

True 或 False

object

Object

所有其他类型的基类型

 

 

string

String

字符序列

 

 

decimal

Decimal

精确小数类型或整型,可以表示带有 29 个有效位的十进制数

128

±1.0 × 10e−28 至 ±7.9 × 10e28

因为 C# 将所有基元数据类型当作对象表示,所以可以在基元数据类型上调用对象方法。例如:

C#  “复制”图像复制代码
static void Main()
{
    int i = 10;
    object o = i;
    System.Console.WriteLine(o.ToString());
}    

借助自动装箱和取消装箱完成此操作。有关更多信息,请参见装箱和取消装箱(C# 编程指南)

“折叠”图像常数

Java 和 C# 均能够声明这样一个变量:它的值在编译时指定,在运行时不能更改。Java 使用 final 字段修饰符声明此类变量,而 C# 则使用 const 关键字。除了 const 以外,C# 还提供 readonly 关键字以声明可以在运行时进行一次赋值(在声明语句中或在构造函数中)的变量。初始化以后,readonly 变量的值不能更改。当已单独编译的模块需要共享版本号等数据时,可以使用 readonly 变量。如果模块 A 更新了,并使用一个新的版本号进行了重新编译,则模块 B 可以用这个新的常数值进行初始化,而无需重新编译。

“折叠”图像枚举

枚举用于对已命名常数进行分组,与在 C 和 C++ 中的用法相似,但不可用于 Java。下面的示例定义一个简单的 Color 枚举。

C#  “复制”图像复制代码
public enum Color
{
    Green,   //defaults to 0
    Orange,  //defaults to 1
    Red,     //defaults to 2
    Blue     //defaults to 3
}  

也可以将整数值分配给枚举,如下面的枚举声明所示:

C#  “复制”图像复制代码
public enum Color2
{
    Green = 10,
    Orange = 20,
    Red = 30,
    Blue = 40
}

下面的代码示例调用 Enum 类型的 GetNames 方法来显示枚举的可用常数。然后,将值分配给枚举,并显示此值。

C#  “复制”图像复制代码
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);
    }
}

“折叠”图像输出

Possible color choices:

Green

Orange

Red

Blue

Favorite Color is Blue

Favorite Color value is 3

“折叠”图像字符串

Java 和 C# 中的字符串类型的行为相似,只有细微的差异。两种字符串类型都是不可变的,意味着一旦创建了字符串,字符串的值就无法更改。两个实例中的方法看上去修改了字符串的实际内容,实际上创建并返回了一个新字符串,而原始字符串保持不变。C# 和 Java 中比较字符串值的过程有所不同。若要在 Java 中比较字符串值,则开发人员需要在字符串类型上调用 equals 方法,原因是默认情况下 == 运算符会比较引用类型。在 C# 中,开发人员可以直接使用 ==!= 运算符来比较字符串值。尽管在 C# 中字符串是引用类型,但在默认情况下 ==!= 运算符将比较字符串值而不是引用。

和在 Java 中一样,C# 开发人员不应使用字符串类型来串连字符串,以避免在每次串连字符串时创建新字符串类所产生的开销。相反,开发人员可以使用 StringBuilder 类,它与 Java 的 StringBuffer 类在功能上等效。

“折叠”图像字符串文本

C# 能够避免在字符串常数中使用转义序列,如用于制表符的 "\t" 或用于反斜杠字符的 "\"。若要达到此目的,只需在分配字符串值之前使用 @ 符号声明原义字符串。下面的示例演示如何使用转义字符以及如何分配字符串文本:

C#  “复制”图像复制代码
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);
}

“折叠”图像转换和强制转换

Java 和 C# 对数据类型的自动转换和强制转换遵循相似的规则。

和 Java 一样,C# 支持隐式和显式类型转换。如果是扩大转换,则为隐式转换。例如,下面从 intlong 的转换为隐式转换,与在 Java 中相同:

C#  “复制”图像复制代码
int int1 = 5;
long long1 = int1;  //implicit conversion

下面是 .NET Framework 数据类型之间的隐式转换列表:

源类型

目标类型

Byte

short、ushort、int、uint、long、ulong、float、double 或 decimal

Sbyte

short、int、long、float、double 或 decimal

Int

long、float、double 或 decimal

Uint

long、ulong、float、double 或 decimal

Short

int、long、float、double 或 decimal

Ushort

int、uint、long、ulong、float、double 或 decimal

Long

float、double 或 decimal

Ulong

float、double 或 decimal

Float

double

Char

ushort、int、uint、long、ulong、float、double 或 decimal

使用与 Java 相同的语法强制转换要显式转换的表达式:

C#  “复制”图像复制代码
long long2 = 5483;
int int2 = (int)long2;  //explicit conversion

下表列出了显式转换。

源类型

目标类型

Byte

sbyte 或 char

Sbyte

byte、ushort、uint、ulong 或 char

Int

sbyte、byte、short、ushort、uint、ulong 或 char

Uint

sbyte、byte、short、ushort、int 或 char

Short

sbyte、byte、ushort、uint、ulong 或 char

Ushort

sbyte、byte、short 或 char

Long

sbyte、byte、short、ushort、int、uint、ulong 或 char

Ulong

sbyte、byte、short、ushort、int、uint、long 或 char

Float

sbyte、byte、short、ushort、int、uint、long、ulong、char 或 decimal

Double

sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 decimal

Char

sbyte、byte 或 short

Decimal

sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 double

“折叠”图像值与引用类型

C# 支持两种变量类型:

  • 值类型

    这些是内置基元数据类型(如 char、int 和 float)以及用 struct 声明的用户定义类型。

  • 引用类型

    从基元类型构造的类和其他复杂的数据类型。这种类型的变量不包含类型的实例而仅包含对实例的引用。

如果创建两个值类型变量 i 和 j(如下所示),则 i 和 j 完全相互独立:

C#  “复制”图像复制代码
int i = 10;
int j = 20;

为它们指定了独立的内存位置:

各种值类型的不同内存地址

如果更改这两个变量中其中一个的值,另一个变量当然不受影响。例如,如果具有如下形式的表达式,则这两个变量之间仍然没有关联:

C#  “复制”图像复制代码
int k = i;

也就是说,如果更改 i 的值,则 k 将保留赋值时 i 具有的值。

C#  “复制”图像复制代码
i = 30;

System.Console.WriteLine(i.ToString());  // 30
System.Console.WriteLine(k.ToString());  // 10

但是,引用类型的行为则不同。例如,可以声明如下所示的两个变量:

C#  “复制”图像复制代码
Employee ee1 = new Employee();
Employee ee2 = ee1;

现在,因为类在 C# 中为引用类型,所以 ee1 被视为对 Employee 的引用。在前面的两行中,第一行在内存中创建 Employee 的一个实例,并设置 ee1 以引用该实例。因此,将 ee2 设置为等于 ee1 时,它包含了对内存中的类的重复引用。如果现在更改 ee2 上的属性,则 ee1 上的属性将反映这些更改,因为两者都指向内存中的相同对象,如下所示:

引用类型的内存位置

“折叠”图像装箱和取消装箱

将值类型转换为引用类型的过程称为装箱。反之,将引用类型转换为值类型的过程则称为取消装箱。下面的代码说明了这一点:

C#  “复制”图像复制代码
int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;  // unboxing

Java 要求手动执行这种转换。可以通过构造这种对象或装箱,将基元数据类型转换为包装类的对象。同样地,可以通过在这种对象上调用合适的方法或取消装箱,从包装类对象中提取基元数据类型的值。有关装箱和取消装箱的更多信息,请参见 装箱转换(C# 编程指南)取消装箱转换(C# 编程指南)

分享到:
评论

相关推荐

    Java与c#语法及对比

    ### Java与C#语法对比详解 #### 一、概述 本文将对Java与C#两种流行编程语言在语法上的异同进行深入分析。通过对比,读者可以更好地理解这两种语言的特点,从而根据项目需求选择合适的技术栈。以下是Java与C#在...

    Java C# 语法 比较

    - Java的泛型(Generics)与C#中的泛型存在语法上的相似性,但实现细节有所不同。 - 两种语言都支持数值转换、装箱和拆箱操作。 4. 表达式与运算符 - Java和C#的算术运算符、关系运算符和逻辑运算符基本相同。 ...

    论C#与Java之异同

    ### 论C#与Java之异同 ...通过以上的对比分析可以看出,尽管C#和Java在很多方面有着相似之处,但它们在细节上仍存在一定的差异。这种比较有助于开发者更好地理解这两种语言的特点,并根据项目需求选择合适的工具。

    DES加密DEMO(C#与JAVA)

    - **C#与JAVA的代码对比**:虽然两个语言的语法和API有所不同,但实现DES的核心逻辑是相同的,都涉及密钥的设置、加密和解密操作。 - **通用性**:DEMO表明C#和JAVA实现的DES算法可以互换使用,这在跨平台开发中很...

    C#与Java对比.pdf

    《C#与Java对比》 本文将探讨C#和Java这两种主流编程语言之间的主要差异,以便于开发者理解和选择适合自己项目的语言。以下是一些关键的区别: 1. 循环语法: - Java的`for`循环既支持索引遍历,也支持基于类型的...

    C++ Java C#.net VB.net 语法对比

    ### C++、Java、C# .NET 和 VB.NET 语法对比 #### 1. 基本数据类型 为了帮助开发者快速掌握不同编程语言的基本数据类型,以下表格提供了C++、VB.NET、C# .NET 和 Java 的基本数据类型的对应关系。 | 基础类型名 |...

    Automated jgit port to c#.zip

    2. **C#与Java语法对比**:理解两者之间的语法差异,如类定义、方法声明、异常处理等。 3. **.NET框架**:熟悉.NET框架,特别是关于文件系统操作、异步编程和网络通信的部分,因为这些是Git库常见的需求。 4. **单元...

    C++、Java和C_的语法比较.doc

    这里主要聚焦于C++与C#的对比,并适当提及Java的相关特性,以帮助读者更好地理解这些语言之间的区别。 ### 一、继承 **C++**: 支持多继承,即一个类可以从多个基类继承属性和方法。 **C#**: 不支持多继承,一个类...

    C#和JAVA的区别总结

    【描述】:"本文将详细对比C#与Java这两门编程语言在源文件、数据类型、运算符、分支语句、访问修饰符、方法、属性、继承、事件、运算符重载、异常处理、索引器以及元数据等方面的不同之处。" 【标签】:"C#与Java的...

    java and c# java and c#

    ### C#与Java的语言特性对比 - **属性**:Java中,属性的访问通常需要通过`get`和`set`方法,而在C#中,属性更像是直接的数据成员,定义时必须同时包含`get`和`set`,访问时使用点操作符,更加直观。 - **对象索引...

    c#与vb对比图

    标题 "C#与VB对比图" 提到的是两种流行的编程语言——C#和Visual Basic (VB)之间的比较。这两种语言都是Microsoft .NET框架的核心部分,用于构建Windows应用程序、Web应用程序和移动应用等。以下是这两者在语法上的...

    C#与JAVA比较.pdf

    在对比C#与Java这两种编程语言时,我们可以发现它们有许多相似之处,但也存在明显的差异。首先,两者都源自C++,并且在语法上有很多共同点。例如,它们都是编译成中间代码,可以在受管理的环境中运行,如.NET ...

    NIIT ISAS C#与JAVA的异同资料及简单ppt

    这里我们将深入探讨C#和Java在语法、应用领域、性能、跨平台性等方面的主要差异。 首先,C#是由微软公司推出的,主要用于.NET框架,而Java由Sun Microsystems(现已被Oracle收购)开发,其目标是实现“一次编写,...

    java与C#的区别

    - Java语法较为简洁,类似于C++,但去除了指针和显式内存管理。 - C#语法更接近C++,保留了指针(但受限于安全性),并引入了一些新的语言特性,如lambda表达式、async/await等。 3. **运行环境**: - Java程序...

    c#&java比较.txt

    ### C#与Java的对比分析 #### 一、概述 C#与Java是两种非常流行的编程语言,在软件开发领域有着广泛的应用。这两种语言都源于C语言家族,它们的设计初衷都是为了提供一种更现代化、更安全且面向对象的编程语言。...

    C#对比java

    ### C#与Java的深入对比分析 #### 一、引言 随着计算机科学的发展,不同的编程语言被设计出来以满足多样化的开发需求。C# 和 Java 是两种非常流行且广泛应用于企业级应用开发的编程语言。尽管它们都属于 C 家族的...

    面试题集锦(C#,java)

    【C#与Java对比知识点详解】 C#和Java都是广泛使用的面向对象的编程语言,它们在语法、特性以及设计哲学上有许多相似之处,但也存在显著的差异。以下是一些主要的区别点: 1. **无符号整数**: - C#支持无符号...

    Java (J2SE 5.0) and C# Comparison

    总结起来,Java和C#在基本语法、注释风格、数据类型处理和枚举定义上都有自己的特点。Java以其跨平台性闻名,而C#通常与.NET框架紧密关联。选择哪种语言取决于项目需求、团队经验和开发工具支持。了解这些差异有助于...

    Professional C#, 3rd Edition_AppC_C# for Java Developers.pdf

    本书《Professional C#, 3rd Edition》中的附录C针对的是C#与Java开发者的对比,旨在帮助Java开发者快速过渡到C#。尽管C#与Java在语法上有着极高的相似性,但两者之间仍存在着微妙却重要的差异。本章节将深入探讨...

Global site tag (gtag.js) - Google Analytics